⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sliderdemo.java

📁 这个一个关于滑动杆演示的Java源代码
💻 JAVA
字号:
import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;/** * <p>Title: 滑动杆演示</p> * <p>Description: 使用滑动杆控制定时器,来控制图片的播放速度</p> * <p>Copyright: Copyright (c) 2003</p> * <p>Filename: SliderDemo.java</p> * @author 杜江 * @version 1.0 */public class SliderDemo extends JPanel                        implements ActionListener,                                   WindowListener,                                   ChangeListener {    //设置图片的参数    static final int FPS_MIN = 0; //设置最小值    static final int FPS_MAX = 30; //设置最大值    static final int FPS_INIT = 15;  //初始数值    int frameNumber = 0;    int NUM_FRAMES = 14;    ImageIcon[] images = new ImageIcon[NUM_FRAMES];    int delay;    Timer timer;    boolean frozen = false;    //这个标签用来显示这只小狗    JLabel picture;    public SliderDemo() {        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));        delay = 1000 / FPS_INIT;        //信息提示标签        JLabel sliderLabel = new JLabel("调整滑动杆,改变播放速度!", JLabel.CENTER);        sliderLabel.setAlignmentX(Component.CENTER_ALIGNMENT);        //创建一个滑动杆,定义了最小值和最大值以及初始值        JSlider framesPerSecond = new JSlider(JSlider.HORIZONTAL,                                              FPS_MIN, FPS_MAX, FPS_INIT);        framesPerSecond.addChangeListener(this);        //定义滑动杆参数        framesPerSecond.setMajorTickSpacing(10);//每10刻度标注一次        framesPerSecond.setMinorTickSpacing(1);//最小刻度为1        framesPerSecond.setPaintTicks(true);//绘制滑动杆上的刻度        framesPerSecond.setPaintLabels(true);//在滑动过程中绘制滑动块        framesPerSecond.setBorder(                BorderFactory.createEmptyBorder(0,0,10,0));        //定义一个用来显示图片的标签        picture = new JLabel();        picture.setHorizontalAlignment(JLabel.CENTER);        picture.setAlignmentX(Component.CENTER_ALIGNMENT);        picture.setBorder(BorderFactory.createCompoundBorder(                BorderFactory.createLoweredBevelBorder(),                BorderFactory.createEmptyBorder(10,10,10,10)));        updatePicture(0); //显示第一张图        //将成员添加到面板上        add(sliderLabel);        add(framesPerSecond);        add(picture);        setBorder(BorderFactory.createEmptyBorder(10,10,10,10));        //设置一个定时器来触发这个事件        timer = new Timer(delay, this);        timer.setInitialDelay(delay * 7); //在每轮循环停顿时间        timer.setCoalesce(true);//设置重复循环    }/** *<br>方法说明:添加一个窗体监听 *<br>输入参数: *<br>返回类型: */    void addWindowListener(Window w) {        w.addWindowListener(this);    }    public void windowIconified(WindowEvent e) {        stopAnimation();    }    public void windowDeiconified(WindowEvent e) {        startAnimation();    }    public void windowOpened(WindowEvent e) {}    public void windowClosing(WindowEvent e) {}    public void windowClosed(WindowEvent e) {}    public void windowActivated(WindowEvent e) {}    public void windowDeactivated(WindowEvent e) {}/** *<br>方法说明:对滑动杆进行监听 *<br>输入参数:ChangeEvent e 滑动杆变动事件 *<br>返回类型: */    public void stateChanged(ChangeEvent e) {        JSlider source = (JSlider)e.getSource();        if (!source.getValueIsAdjusting()) {            int fps = (int)source.getValue();//获得滑动杆的值            if (fps == 0) {                if (!frozen) stopAnimation();            } else {                delay = 1000 / fps;                timer.setDelay(delay);                timer.setInitialDelay(delay * 10);                if (frozen) startAnimation();            }        }    }/** *<br>方法说明:开始动画 *<br>输入参数: *<br>返回类型: */    public void startAnimation() {        timer.start();        frozen = false;    }/** *<br>方法说明:停止动画 *<br>输入参数: *<br>返回类型: */    public void stopAnimation() {        timer.stop();        frozen = true;    }/** *<br>方法说明:事件监听 *<br>输入参数: *<br>返回类型: */    public void actionPerformed(ActionEvent e) {        //改变图片帧        if (frameNumber == (NUM_FRAMES - 1)) {            frameNumber = 0;        } else {            frameNumber++;        }        updatePicture(frameNumber); //显示下张图        if ( frameNumber==(NUM_FRAMES - 1)          || frameNumber==(NUM_FRAMES/2 - 1) ) {            timer.restart();        }    }/** *<br>方法说明:绘制当前帧 *<br>输入参数:int frameNum 图片帧数数 *<br>返回类型: */    protected void updatePicture(int frameNum) {        if (images[frameNumber] == null) {            images[frameNumber] = createImageIcon("images/doggy/T"                                                  + frameNumber                                                  + ".gif");        }        //绘制图片        if (images[frameNumber] != null) {            picture.setIcon(images[frameNumber]);        } else { //如果没有发现图片            picture.setText("image #" + frameNumber + " not found");        }    }/** *<br>方法说明:获取图片 *<br>输入参数:String path 图片路径 *<br>返回类型:ImageIcon 图片对象 */    protected static ImageIcon createImageIcon(String path) {        java.net.URL imgURL = SliderDemo.class.getResource(path);        if (imgURL != null) {            return new ImageIcon(imgURL);        } else {            System.err.println("Couldn't find file: " + path);            return null;        }    }/** *<br>方法说明:主方法 *<br>输入参数: *<br>返回类型: */    public static void main(String[] args) {        JFrame.setDefaultLookAndFeelDecorated(true);        //定义窗体        JFrame frame = new JFrame("SliderDemo");        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        //实例化本类        SliderDemo animator = new SliderDemo();        animator.setOpaque(true);        frame.setContentPane(animator);        //显示窗体        frame.pack();        frame.setVisible(true);        animator.startAnimation();     }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -