• swing 跑马灯特效(不断动态前进的效果)


    跑马灯特效(不断动态前进的效果)

    1,跑马灯特效的障眼法实现:就是前面不断循环 添加空格 ,视觉效果就好像跑起来了哈哈哈

    swing写的跑马灯 + 进度条更新效果小项目 代码:

      ❀class ProgressBar

    package ProgressBar;
    
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JProgressBar;
    
    public class ProgressBar extends JFrame {
        private JButton startButton;    //开始按钮
        private JButton pauseButton;    //暂停按钮
        private JPanel contentPane;        //内容面板
        private JProgressBar progressBar;//进度条 ,使用默认的呀呀呀呀,不用基础JProgressBar重写一个好看的
        private ProgressBarTask progressBarTask;//进度条任务
        private MarqueeTask marqueeTask;        //跑马灯特效任务
        public ProgressBar() {
            //设置标题
            setTitle("进度条");
            //设置退出模式
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            //设置大小
            setSize(800,600);
            //居中
            setLocationRelativeTo(null);
            //初始化
            initCommponents();
            //添加事件
            initEvents();
        }
    
        private void initCommponents() {
            //内容面板
            contentPane = (JPanel) getContentPane();
            //添加开始、暂停按钮
            startButton = new JButton("开始");
            pauseButton = new JButton("暂停");
            //顶部布局面板
            JPanel topPane = new JPanel();
            //顶部布局面板添加开始、暂停按钮
            topPane.add(startButton);
            topPane.add(pauseButton);
            //进度条面板
            JPanel progressBarPane = new JPanel();
            //进度条面板添加进度条
            progressBar = new JProgressBar();
            //设置进度条大小
            progressBar.setPreferredSize(new Dimension(600,30));
            //设置进度条的数字
            progressBar.setStringPainted(true);
            progressBarPane.add(progressBar);
            //内容面板添加你进度条面板到中间
            contentPane.add(progressBarPane, BorderLayout.CENTER);
            //内容面板添加顶部面板到顶部
            contentPane.add(topPane, BorderLayout.NORTH);
    
        }
    
        private void initEvents() {
            // 为开始按钮添加事件
            startActionListenner();
            //为暂停按钮添加事件
            pauseActionListener();
            
            
        }
    
        private void startActionListenner() {
            startButton.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    if(e.getClickCount() == 1 && e.getButton() == MouseEvent.BUTTON1) {
                        //开始进度条任务
                        progressBarTask = new ProgressBarTask(progressBar);
                        //装有进度条任务的线程
                        Thread thread1 = new Thread(progressBarTask);
                        thread1.start();
                        marqueeTask = new MarqueeTask(ProgressBar.this);
                        new Thread(marqueeTask).start();;
                        
                    }
                }
            });
        }
    
        private void pauseActionListener() {
            pauseButton.addActionListener(new ActionListener() {
                
                @Override
                public void actionPerformed(ActionEvent e) {
                    progressBarTask.stop();
                    
                }
            });
            
        }
        
        public static void main(String[] args) {
            new ProgressBar().setVisible(true);
        }
    }

      ❀class ProgressBarTask

    package ProgressBar;
    
    import java.util.concurrent.TimeUnit;
    
    import javax.swing.JProgressBar;
    
    /**
     * 进度条更新任务
     * @author Huangyujun
     *
     */
    
    public class ProgressBarTask implements Runnable{
        //private ProgressBar progressBar;   因为咱自己写的Progress 没有继承JProgressBar重写它,
        //而是new 一个 JProgressBar默认样式
        //这里也要使用JProgressBar
        private JProgressBar progressBar; 
        private boolean isStopProgress = false;
        public ProgressBarTask(JProgressBar progressBar) {
            this.progressBar = progressBar;
        }
        @Override
        public void run() {
            int currValue = progressBar.getValue();
            // 开始进度条
            while (currValue < 100 && !isStopProgress) {
                currValue = progressBar.getValue();
                progressBar.setValue(currValue + 1);
                try {
                    TimeUnit.MILLISECONDS.sleep(300);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
        }
        public void stop() {
            isStopProgress = true;
        }
    }

      ❀class MarqueeTask

    package ProgressBar;
    
    import java.util.TimerTask;
    import java.util.concurrent.TimeUnit;
    
    import javax.swing.JFrame;
    
    /** 
     * 跑马灯特效任务
     * @author Huangyujun
     *
     */
    public class MarqueeTask implements Runnable{
        private JFrame jFrame;
        String title;
        public MarqueeTask(JFrame jFrame) {
            this.jFrame = jFrame;
            title = jFrame.getTitle();
        }
        @Override
        public void run() {
            StringBuffer strTitle = new StringBuffer(title);
            while(true) {
                strTitle.insert(0, " ");
                if(strTitle.length() == 100) {
                    strTitle = new StringBuffer(strTitle.toString().trim());
                }
                try {
                    TimeUnit.MILLISECONDS.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                jFrame.setTitle(strTitle.toString());
            }
            
        }
        
    }

     转自:老九学堂线上java班《java多线程---跑马灯案例》和《java多线程----创建线程的方法--Runnable》

  • 相关阅读:
    在桌面建立快捷方式 Mr
    在窗口中显示一幅 JPG 图象 Mr
    【转载】COM组件设计与应用(一)——起源及复合文件 Mr
    【转载】COM组件设计与应用(二)——GUID和接口 Mr
    关于在Win7 SP1操作系统下编译的ADO应用程序不能在比Win7 SP1版本低的操作系统上运行,微软给出的解释和解决方案 Mr
    Vue UI图形化项目管理使用
    vue+eldialog提交校验
    获取当前日期前一个月日期与天数数组
    element输入框只能输入数字或小数保留两位小数
    vue+ DatePicker日期的加减
  • 原文地址:https://www.cnblogs.com/shan333/p/14776063.html
Copyright © 2020-2023  润新知