日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JavaSwing編程:進度條和滑動條

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

專注于為中小企業(yè)提供成都網(wǎng)站設計、網(wǎng)站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)通川免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎ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.         bar.setStringPainted(true);
  19.         noBorder.addActionListener(new ActionListener()
  20.         {  
  21.             public void actionPerformed(ActionEvent event)
  22.             {
  23.                 //根據(jù)該選擇框決定是否繪制進度條的邊框
  24.                 bar.setBorderPainted(!noBorder.isSelected());
  25.             }
  26.         });
  27.         final SimulatedTarget target = new SimulatedTarget(1000);
  28.         //以啟動一條線程的方式來執(zhí)行一個耗時的任務
  29.         new Thread(target).start();
  30.         //設置進度條的最大值和最小值,
  31.         bar.setMinimum(0); 
  32.         //以總?cè)蝿樟孔鳛檫M度條的最大值
  33.         bar.setMaximum(target.getAmount());
  34.         Timer timer = new Timer(300 , new ActionListener()
  35.         {
  36.             public void actionPerformed(ActionEvent e)
  37.             {
  38.                 //以任務的當前完成量設置進度條的value
  39.                 bar.setValue(target.getCurrent());
  40.             }
  41.         });
  42.         timer.start();
  43.         indeterminate.addActionListener(new ActionListener()
  44.         {  
  45.             public void actionPerformed(ActionEvent event)
  46.             {
  47.                 //設置該進度條的進度是否確定
  48.                 bar.setIndeterminate(indeterminate.isSelected());
  49.                 bar.setStringPainted(!indeterminate.isSelected());
  50.             }
  51.         });
  52.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  53.         frame.pack();
  54.         frame.setVisible(true);
  55.     }
  56.     public static void main(String[] args) 
  57.     {
  58.         new TestJProgressBar().init();
  59.     }
  60. }
  61. //模擬一個耗時的任務
  62. class SimulatedTarget implements Runnable
  63.     //任務的當前完成量
  64.     private volatile int current;
  65.     //總?cè)蝿樟?
  66.     private int amount;
  67.     public SimulatedTarget(int amount)
  68.     {  
  69.         current = 0;
  70.         this.amount = amount;
  71.     }
  72.     public int getAmount()
  73.     {  
  74.       return amount;
  75.     }
  76.     public int getCurrent()
  77.     {  
  78.         return current;
  79.     }
  80.     //run方法代表不斷完成任務的過程
  81.     public void run()
  82.     {  
  83.         while (current < amount)
  84.         { 
  85.             try
  86.             {
  87.                 Thread.sleep(50);
  88.             }
  89.             catch(InterruptedException e)
  90.             {
  91.             }
  92.             current++;
  93.         }
  94.     }
  95. }

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í)行一個耗時的任務
  8.         final Thread targetThread = new Thread(target);
  9.         targetThread.start();
  10.         //創(chuàng)建進度對話框
  11.         final ProgressMonitor dialog = new ProgressMonitor(null ,
  12.             "等待任務完成" , "已完成:" , 0 , target.getAmount());
  13.         //創(chuàng)建一個計時器
  14.         timer = new Timer(300 , new ActionListener()
  15.         {
  16.             public void actionPerformed(ActionEvent e)
  17.             {
  18.                 //以任務的當前完成量設置進度對話框的完成比例
  19.                 dialog.setProgress(target.getCurrent());
  20.                 //如果用戶單擊了進度對話框的”取消“按鈕
  21.                 if (dialog.isCanceled())
  22.                 {
  23.                     //停止計時器
  24.                     timer.stop();
  25.                     //中斷任務的執(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.     }
  38. }

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

滑動條和進度條差不多,他們共用一個模型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.         //-----------添加保留區(qū)為30的滑動條-----------
  23.         slider = new JSlider();
  24.         slider.setExtent(30);
  25.         addSlider(slider, "保留區(qū)為30");
  26.         //-----------添加帶主、次刻度的滑動條,并設置其最大值,最小值-----------
  27.         slider = new JSlider(30 , 200);
  28.         //設置繪制刻度
  29.         slider.setPaintTicks(true);
  30.         //設置主、次刻度的間距
  31.         slider.setMajorTickSpacing(20);
  32.         slider.setMinorTickSpacing(5);
  33.         addSlider(slider, "有刻度");
  34.         //-----------添加滑塊必須停在刻度處滑動條-----------
  35.         slider = new JSlider();
  36.         //設置滑塊必須停在刻度處
  37.         slider.setSnapToTicks(true);
  38.         //設置繪制刻度
  39.         slider.setPaintTicks(true);
  40.         //設置主、次刻度的間距
  41.         slider.setMajorTickSpacing(20);
  42.         slider.setMinorTickSpacing(5);
  43.         addSlider(slider, "滑塊停在刻度處");
  44.         //-----------添加沒有滑軌的滑動條-----------
  45.         slider = new JSlider();
  46.         //設置繪制刻度
  47.         slider.setPaintTicks(true);
  48.         //設置主、次刻度的間距
  49.         slider.setMajorTickSpacing(20);
  50.         slider.setMinorTickSpacing(5);
  51.         //設置不繪制滑軌
  52.         slider.setPaintTrack(false);
  53.         addSlider(slider, "無滑軌");
  54.         //-----------添加方向反轉(zhuǎn)的滑動條-----------
  55.         slider = new JSlider();
  56.         //設置繪制刻度
  57.         slider.setPaintTicks(true);
  58.         //設置主、次刻度的間距
  59.         slider.setMajorTickSpacing(20);
  60.         slider.setMinorTickSpacing(5);
  61.         //設置方向反轉(zhuǎn)
  62.         slider.setInverted(true);
  63.         addSlider(slider, "方向反轉(zhuǎn)");
  64.         //-----------添加繪制默認刻度標簽的滑動條-----------
  65.         slider = new JSlider();
  66.         //設置繪制刻度
  67.         slider.setPaintTicks(true);
  68.         //設置主、次刻度的間距
  69.         slider.setMajorTickSpacing(20);
  70.         slider.setMinorTickSpacing(5);
  71.         //設置繪制刻度標簽,默認繪制數(shù)值刻度標簽
  72.         slider.setPaintLabels(true);
  73.         addSlider(slider, "數(shù)值刻度標簽");
  74.         //-----------添加繪制Label類型的刻度標簽的滑動條----------- 
  75.         slider = new JSlider();
  76.         //設置繪制刻度
  77.         slider.setPaintTicks(true);
  78.         //設置主、次刻度的間距
  79.         slider.setMajorTickSpacing(20);
  80.         slider.setMinorTickSpacing(5);
  81.         //設置繪制刻度標簽
  82.         slider.setPaintLabels(true);
  83.         Dictionary labelTable = new Hashtable();
  84.         labelTable.put(0, new JLabel("A"));
  85.         labelTable.put(20, new JLabel("B"));
  86.         labelTable.put(40, new JLabel("C"));
  87.         labelTable.put(60, new JLabel("D"));
  88.         labelTable.put(80, new JLabel("E"));
  89.         labelTable.put(100, new JLabel("F"));
  90.         //指定刻度標簽,標簽是JLabel
  91.         slider.setLabelTable(labelTable);
  92.         addSlider(slider, "JLable標簽");
  93.         //-----------添加繪制Label類型的刻度標簽的滑動條----------- 
  94.         slider = new JSlider();
  95.         //設置繪制刻度
  96.         slider.setPaintTicks(true);
  97.         //設置主、次刻度的間距
  98.         slider.setMajorTickSpacing(20);
  99.         slider.setMinorTickSpacing(5);
  100.         //設置繪制刻度標簽
  101.         slider.setPaintLabels(true);
  102.         labelTable = new Hashtable();
  103.         labelTable.put(0, new JLabel(new ImageIcon("ico/0.GIF")));
  104.         labelTable.put(20, new JLabel(new ImageIcon("ico/2.GIF")));
  105.         labelTable.put(40, new JLabel(new ImageIcon("ico/4.GIF")));
  106.         labelTable.put(60, new JLabel(new ImageIcon("ico/6.GIF")));
  107.         labelTable.put(80, new JLabel(new ImageIcon("ico/8.GIF")));
  108.         //指定刻度標簽,標簽是ImageIcon
  109.         slider.setLabelTable(labelTable);
  110.         addSlider(slider, "Icon標簽");
  111.         mainWin.add(sliderBox, BorderLayout.CENTER);
  112.         mainWin.add(showVal, BorderLayout.SOUTH);
  113.         mainWin.pack();
  114.         mainWin.setVisible(true);
  115.     }
  116.     //定義一個方法,用于將滑動條添加到容器中
  117.     public void addSlider(JSlider slider, String description)
  118.     {        
  119.         slider.addChangeListener(listener);
  120.         Box box = new Box(BoxLayout.X_AXIS);
  121.         box.add(new JLabel(description + ":"));
  122.         box.add(slider);
  123.         sliderBox.add(box);
  124.     }
  125.     public static void main(String[] args)
  126.     {
  127.         new TestJSlider().init();
  128.     }
  129. }

當前題目:JavaSwing編程:進度條和滑動條
轉(zhuǎn)載來源:http://www.dlmjj.cn/article/djsehps.html