自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java Swing編程:進度條和滑動條

開發(fā) 后端
前幾天講了Swing基本的控件,今天開始講特殊控件。一天講2個吧,首先講用JProgressBar,ProgressMonitor和BoundedRangeModel來實現(xiàn)進度條。然后講用JSlider和BoundedRangeModel來實現(xiàn)滑動條。

前幾天講了Swing基本的控件,今天開始講特殊控件。一天講2個吧,首先講用JProgressBar,ProgressMonitor和BoundedRangeModel來實現(xiàn)進度條。然后講用JSlider和BoundedRangeModel來實現(xiàn)滑動條。

進度條,eg

  1. public class TestJProgressBar  
  2. {  
  3.     JFrame frame = new JFrame("測試進度條");  
  4.     //創(chuàng)建一條垂直進度條  
  5.     JProgressBar bar = new JProgressBar(JProgressBar.VERTICAL );  
  6.     JCheckBox indeterminate = new JCheckBox("不確定進度");  
  7.     JCheckBox noBorder = new JCheckBox("不繪制邊框");  
  8.     public void init()  
  9.     {  
  10.         Box box = new Box(BoxLayout.Y_AXIS);  
  11.         box.add(indeterminate);  
  12.         box.add(noBorder);  
  13.         frame.setLayout(new FlowLayout());  
  14.         frame.add(box);  
  15.         //把進度條添加到JFrame窗口中  
  16.         frame.add(bar);  
  17.  
  18.         //設(shè)置在進度條中繪制完成百分比  
  19.         bar.setStringPainted(true);  
  20.         noBorder.addActionListener(new ActionListener()  
  21.         {    
  22.             public void actionPerformed(ActionEvent event)  
  23.             {  
  24.                 //根據(jù)該選擇框決定是否繪制進度條的邊框  
  25.                 bar.setBorderPainted(!noBorder.isSelected());  
  26.             }  
  27.         });  
  28.         final SimulatedTarget target = new SimulatedTarget(1000);  
  29.         //以啟動一條線程的方式來執(zhí)行一個耗時的任務(wù)  
  30.         new Thread(target).start();  
  31.         //設(shè)置進度條的最大值和最小值,  
  32.         bar.setMinimum(0);   
  33.         //以總?cè)蝿?wù)量作為進度條的最大值  
  34.         bar.setMaximum(target.getAmount());  
  35.         Timer timer = new Timer(300 , new ActionListener()  
  36.         {  
  37.             public void actionPerformed(ActionEvent e)  
  38.             {  
  39.                 //以任務(wù)的當前完成量設(shè)置進度條的value  
  40.                 bar.setValue(target.getCurrent());  
  41.             }  
  42.         });  
  43.         timer.start();  
  44.         indeterminate.addActionListener(new ActionListener()  
  45.         {    
  46.             public void actionPerformed(ActionEvent event)  
  47.             {  
  48.                 //設(shè)置該進度條的進度是否確定  
  49.                 bar.setIndeterminate(indeterminate.isSelected());  
  50.                 bar.setStringPainted(!indeterminate.isSelected());  
  51.             }  
  52.         });  
  53.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  54.         frame.pack();  
  55.         frame.setVisible(true);  
  56.     }  
  57.     public static void main(String[] args)   
  58.     {  
  59.         new TestJProgressBar().init();  
  60.     }  
  61. }  
  62. //模擬一個耗時的任務(wù)  
  63. class SimulatedTarget implements Runnable  
  64. {   
  65.     //任務(wù)的當前完成量  
  66.     private volatile int current;  
  67.     //總?cè)蝿?wù)量  
  68.     private int amount;  
  69.     public SimulatedTarget(int amount)  
  70.     {    
  71.         current = 0;  
  72.         this.amount = amount;  
  73.     }  
  74.  
  75.     public int getAmount()  
  76.     {    
  77.       return amount;  
  78.     }  
  79.  
  80.     public int getCurrent()  
  81.     {    
  82.         return current;  
  83.     }  
  84.     //run方法代表不斷完成任務(wù)的過程  
  85.     public void run()  
  86.     {    
  87.  
  88.         while (current < amount)  
  89.         {   
  90.             try 
  91.             {  
  92.                 Thread.sleep(50);  
  93.             }  
  94.             catch(InterruptedException e)  
  95.             {  
  96.  
  97.             }  
  98.             current++;  
  99.         }  
  100.     }  

SimulatedTarget模擬了一個耗時程序,JProgressBar存在BoundedRangeModel用于保存數(shù)據(jù)對象。

ProgressMonitor是進度對話框,用起來很方便,但就缺乏了自主性,eg

  1. public class TestProgressMonitor  
  2. {  
  3.     Timer timer;  
  4.     public void init()  
  5.     {  
  6.         final SimulatedTarget target = new SimulatedTarget(1000);  
  7.         //以啟動一條線程的方式來執(zhí)行一個耗時的任務(wù)  
  8.         final Thread targetThread = new Thread(target);  
  9.         targetThread.start();  
  10.         //創(chuàng)建進度對話框  
  11.         final ProgressMonitor dialog = new ProgressMonitor(null ,  
  12.             "等待任務(wù)完成" , "已完成:" , 0 , target.getAmount());  
  13.         //創(chuàng)建一個計時器  
  14.         timer = new Timer(300 , new ActionListener()  
  15.         {  
  16.             public void actionPerformed(ActionEvent e)  
  17.             {  
  18.                 //以任務(wù)的當前完成量設(shè)置進度對話框的完成比例  
  19.                 dialog.setProgress(target.getCurrent());  
  20.                 //如果用戶單擊了進度對話框的”取消“按鈕  
  21.                 if (dialog.isCanceled())  
  22.                 {  
  23.                     //停止計時器  
  24.                     timer.stop();  
  25.                     //中斷任務(wù)的執(zhí)行線程  
  26.                     targetThread.interrupt();  
  27.                     //系統(tǒng)退出  
  28.                     System.exit(0);  
  29.                 }  
  30.             }  
  31.         });  
  32.         timer.start();  
  33.     }  
  34.     public static void main(String[] args)   
  35.     {  
  36.         new TestProgressMonitor().init();  
  37.     }  

這個程序利用了上面的耗時程序。進度條就是那么簡單。

滑動條和進度條差不多,他們共用一個模型BoundedRangeModel。下面是個滑動條的各樣式的演示例子,eg

  1. public class TestJSlider  
  2. {  
  3.     JFrame mainWin = new JFrame("滑動條示范");  
  4.     Box sliderBox = new Box(BoxLayout.Y_AXIS);  
  5.     JTextField showVal = new JTextField();  
  6.     ChangeListener listener;  
  7.     public void init()   
  8.     {  
  9.         //定義一個監(jiān)聽器,用于監(jiān)聽所有滑動條  
  10.         listener = new ChangeListener()  
  11.         {    
  12.             public void stateChanged(ChangeEvent event)  
  13.             {    
  14.                 //取出滑動條的值,并在文本中顯示出來  
  15.                 JSlider source = (JSlider) event.getSource();  
  16.                 showVal.setText("當前滑動條的值為:" + source.getValue());  
  17.             }  
  18.         };  
  19.         //-----------添加一個普通滑動條-----------  
  20.         JSlider slider = new JSlider();  
  21.         addSlider(slider, "普通滑動條");  
  22.  
  23.         //-----------添加保留區(qū)為30的滑動條-----------  
  24.         slider = new JSlider();  
  25.         slider.setExtent(30);  
  26.         addSlider(slider, "保留區(qū)為30");  
  27.  
  28.         //-----------添加帶主、次刻度的滑動條,并設(shè)置其最大值,最小值-----------  
  29.         slider = new JSlider(30 , 200);  
  30.         //設(shè)置繪制刻度  
  31.         slider.setPaintTicks(true);  
  32.         //設(shè)置主、次刻度的間距  
  33.         slider.setMajorTickSpacing(20);  
  34.         slider.setMinorTickSpacing(5);  
  35.         addSlider(slider, "有刻度");  
  36.  
  37.         //-----------添加滑塊必須停在刻度處滑動條-----------  
  38.         slider = new JSlider();  
  39.         //設(shè)置滑塊必須停在刻度處  
  40.         slider.setSnapToTicks(true);  
  41.         //設(shè)置繪制刻度  
  42.         slider.setPaintTicks(true);  
  43.         //設(shè)置主、次刻度的間距  
  44.         slider.setMajorTickSpacing(20);  
  45.         slider.setMinorTickSpacing(5);  
  46.         addSlider(slider, "滑塊停在刻度處");  
  47.  
  48.         //-----------添加沒有滑軌的滑動條-----------  
  49.         slider = new JSlider();  
  50.         //設(shè)置繪制刻度  
  51.         slider.setPaintTicks(true);  
  52.         //設(shè)置主、次刻度的間距  
  53.         slider.setMajorTickSpacing(20);  
  54.         slider.setMinorTickSpacing(5);  
  55.         //設(shè)置不繪制滑軌  
  56.         slider.setPaintTrack(false);  
  57.         addSlider(slider, "無滑軌");  
  58.  
  59.         //-----------添加方向反轉(zhuǎn)的滑動條-----------  
  60.         slider = new JSlider();  
  61.         //設(shè)置繪制刻度  
  62.         slider.setPaintTicks(true);  
  63.         //設(shè)置主、次刻度的間距  
  64.         slider.setMajorTickSpacing(20);  
  65.         slider.setMinorTickSpacing(5);  
  66.         //設(shè)置方向反轉(zhuǎn)  
  67.         slider.setInverted(true);  
  68.         addSlider(slider, "方向反轉(zhuǎn)");  
  69.  
  70.         //-----------添加繪制默認刻度標簽的滑動條-----------  
  71.         slider = new JSlider();  
  72.         //設(shè)置繪制刻度  
  73.         slider.setPaintTicks(true);  
  74.         //設(shè)置主、次刻度的間距  
  75.         slider.setMajorTickSpacing(20);  
  76.         slider.setMinorTickSpacing(5);  
  77.         //設(shè)置繪制刻度標簽,默認繪制數(shù)值刻度標簽  
  78.         slider.setPaintLabels(true);  
  79.         addSlider(slider, "數(shù)值刻度標簽");  
  80.  
  81.         //-----------添加繪制Label類型的刻度標簽的滑動條-----------   
  82.         slider = new JSlider();  
  83.         //設(shè)置繪制刻度  
  84.         slider.setPaintTicks(true);  
  85.         //設(shè)置主、次刻度的間距  
  86.         slider.setMajorTickSpacing(20);  
  87.         slider.setMinorTickSpacing(5);  
  88.         //設(shè)置繪制刻度標簽  
  89.         slider.setPaintLabels(true);  
  90.         Dictionary<Integer, Component> labelTable = new Hashtable<Integer, Component>();  
  91.         labelTable.put(0new JLabel("A"));  
  92.         labelTable.put(20new JLabel("B"));  
  93.         labelTable.put(40new JLabel("C"));  
  94.         labelTable.put(60new JLabel("D"));  
  95.         labelTable.put(80new JLabel("E"));  
  96.         labelTable.put(100new JLabel("F"));  
  97.         //指定刻度標簽,標簽是JLabel  
  98.         slider.setLabelTable(labelTable);  
  99.         addSlider(slider, "JLable標簽");  
  100.  
  101.         //-----------添加繪制Label類型的刻度標簽的滑動條-----------   
  102.         slider = new JSlider();  
  103.         //設(shè)置繪制刻度  
  104.         slider.setPaintTicks(true);  
  105.         //設(shè)置主、次刻度的間距  
  106.         slider.setMajorTickSpacing(20);  
  107.         slider.setMinorTickSpacing(5);  
  108.         //設(shè)置繪制刻度標簽  
  109.         slider.setPaintLabels(true);  
  110.         labelTable = new Hashtable<Integer, Component>();  
  111.         labelTable.put(0new JLabel(new ImageIcon("ico/0.GIF")));  
  112.         labelTable.put(20new JLabel(new ImageIcon("ico/2.GIF")));  
  113.         labelTable.put(40new JLabel(new ImageIcon("ico/4.GIF")));  
  114.         labelTable.put(60new JLabel(new ImageIcon("ico/6.GIF")));  
  115.         labelTable.put(80new JLabel(new ImageIcon("ico/8.GIF")));  
  116.         //指定刻度標簽,標簽是ImageIcon  
  117.         slider.setLabelTable(labelTable);  
  118.         addSlider(slider, "Icon標簽");  
  119.  
  120.         mainWin.add(sliderBox, BorderLayout.CENTER);  
  121.         mainWin.add(showVal, BorderLayout.SOUTH);  
  122.         mainWin.pack();  
  123.         mainWin.setVisible(true);  
  124.  
  125.     }  
  126.     //定義一個方法,用于將滑動條添加到容器中  
  127.     public void addSlider(JSlider slider, String description)  
  128.     {          
  129.         slider.addChangeListener(listener);  
  130.         Box box = new Box(BoxLayout.X_AXIS);  
  131.         box.add(new JLabel(description + ":"));  
  132.         box.add(slider);  
  133.         sliderBox.add(box);  
  134.     }  
  135.  
  136.     public static void main(String[] args)  
  137.     {  
  138.         new TestJSlider().init();  
  139.     }  

原文鏈接:http://blog.csdn.net/terryzero/article/details/3797782

【編輯推薦】

  1. Java Swing編程:Applet和JApplet
  2. Java Swing編程:拖放功能
  3. Java Swing編程:特殊容器
  4. Java Swing編程:基本組件
  5. Java Swing用戶界面設(shè)計:序
責(zé)任編輯:林師授 來源: terryzero的博客
相關(guān)推薦

2009-06-06 18:54:02

JSP編程進度條

2015-07-31 11:19:43

數(shù)字進度條源碼

2011-07-05 15:16:00

QT 進度條

2024-08-06 14:29:37

2023-12-11 17:15:05

應(yīng)用開發(fā)波紋進度條ArkUI

2024-06-13 08:15:00

2009-08-17 15:48:47

C# WinForm進

2015-01-12 12:13:03

Android進度條ProgressDia

2009-08-17 14:41:47

C#進度條實現(xiàn)

2009-12-25 17:58:12

WPF進度條

2009-08-18 09:49:00

C# listview

2019-04-16 14:36:32

QQApp Store語音

2020-12-14 13:32:40

Python進度條參數(shù)

2010-01-25 18:27:54

Android進度條

2013-03-12 10:35:06

CSS 3

2024-12-02 09:37:51

2015-01-12 09:30:54

Android進度條ProgressDia

2015-08-03 11:39:20

擬物化進度條

2023-12-27 13:45:00

Python進度條代碼
點贊
收藏

51CTO技術(shù)棧公眾號