• 初识 进度条JProgressBar


    ProgressBarTest类:

      实现接口:ActionListener,PropertiesChangeListener

      覆盖方法:actionPerformed(),propertyChange()

    Task类:

      继承SwingWorker<Void,Void>

      覆盖方法doInBackground()


    Important Code:

      66~86

    View Code
      1 package com.slh.swing;
      2 
      3 import java.awt.*;
      4 import java.awt.event.ActionEvent;
      5 import java.awt.event.ActionListener;
      6 import java.beans.PropertyChangeEvent;
      7 import java.beans.PropertyChangeListener;
      8 import java.util.concurrent.TimeUnit;
      9 
     10 import javax.swing.*;
     11 
     12 public class ProgressBarTest extends JPanel implements ActionListener,
     13     PropertyChangeListener {
     14   private JButton startButton;
     15   private JProgressBar progressBar;
     16   private JTextArea taskOutput;
     17   private Task task;
     18 
     19   class Task extends SwingWorker<Void, Void> {
     20 
     21     @Override
     22     protected Void doInBackground() throws Exception {
     23       int progress=0;
     24       while(progress<100){
     25         Thread.sleep(1000);
     26         progress+=10;
     27         setProgress(Math.min(progress,100));
     28       }
     29       return null;
     30     }
     31     protected void done(){
     32       startButton.setEnabled(true);
     33       setCursor(null);
     34       taskOutput.append("Done!\n");
     35     }
     36 
     37   }
     38 
     39   public ProgressBarTest() {
     40     super(new BorderLayout());
     41     initComponent();
     42   }
     43 
     44   private void initComponent() {
     45     startButton = new JButton("start");
     46     //startButton.setActionCommand("start");//
     47     startButton.addActionListener(this);
     48     
     49     progressBar=new JProgressBar();
     50     progressBar.setValue(0);
     51     progressBar.setStringPainted(true);//
     52     
     53     taskOutput=new JTextArea(5,20);
     54     taskOutput.setMargin(new Insets(5,5,5,5));
     55     taskOutput.setEditable(false);
     56     
     57     JPanel jPanel=new JPanel();
     58     jPanel.add(startButton);
     59     jPanel.add(progressBar);
     60     
     61     add(jPanel,BorderLayout.PAGE_START);
     62     add(new JScrollPane(taskOutput),BorderLayout.CENTER);
     63     setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
     64   }
     65 
     66   @Override
     67   public void propertyChange(PropertyChangeEvent evt) {
     68     // TODO Auto-generated method stub
     69     if("progress"==evt.getPropertyName()){
     70       int progress=(Integer) evt.getNewValue();
     71       progressBar.setValue(progress);
     72       taskOutput.append("当前进度"+progress+"%\n");
     73     }
     74 
     75   }
     76 
     77   @Override
     78   public void actionPerformed(ActionEvent e) {
     79     startButton.setEnabled(false);
     80     setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
     81     task=new Task();
     82     task.addPropertyChangeListener(this);
     83     task.execute();
     84   }
     85 
     86   private static void createAndShowGUI() {
     87     JFrame jFrame = new JFrame();
     88     jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     89 
     90     JComponent pbt = new ProgressBarTest();
     91     pbt.setOpaque(true);
     92     jFrame.setContentPane(pbt);
     93 
     94     jFrame.pack();
     95     jFrame.setVisible(true);
     96   }
     97 
     98   public static void main(String[] args) {
     99     SwingUtilities.invokeLater(new Runnable() {
    100       public void run() {
    101         createAndShowGUI();
    102       }
    103     });
    104   }
    105 
    106 }
  • 相关阅读:
    git和svn
    [Luogu] P1144 最短路计数
    [Luogu] CF280C Game on Tree
    LCA的一种优秀实现方式(倍增+dfs序)
    [Luogu] P1131 [ZJOI2007]时态同步
    [Luogu] P2285 [HNOI2004]打鼹鼠
    背包相关问题总结
    【笔记】模拟梯度下降法的实现
    【笔记】梯度下降法的简单了解
    【笔记】线性回归的可解性和更多思考及线性回归总结
  • 原文地址:https://www.cnblogs.com/sunflower627/p/2762993.html
Copyright © 2020-2023  润新知