ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-05-17 11:02:55  阅读:320  来源: 互联网

标签:特效 进度条 swing private progressBar 跑马灯 new import public


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

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》

标签:特效,进度条,swing,private,progressBar,跑马灯,new,import,public
来源: https://www.cnblogs.com/shan333/p/14776063.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有