1、第11章+进度条第11章 进度条、滑杆和分隔条本章介绍三个Swing组件:JProgressBar、JSlider和JSeparator。人们经常用进度条反映耗时任务已完成的百分比,本章将提供这样一个例子。但是,用ProgressMonitor和ProgressMonitorInputStream实用工具来反映一个任务的进度信息通常会更容易。“进度监控”小节中讨论了ProgressMonitor和ProgressMonitorInputStream实用工具。JProgressBar和JSlider与JSeparator一样,用来描述一个介于最小值和最大值之间的值。因此,与JProgressBa
2、r和JSlider相关的模型是BoundedRangeModel接口的一个实现。JSeparator是绘制一条蚀刻线的组件,它把逻辑上相关的组件分隔在一组,JSeparator组件可水平地垂直地放置。 11.1 JProgressBarJProgressBar是一个简单的组件,它一般是一种颜色部分或完全填充的矩形。缺省情况下,进度条配备了一个凹陷的边框,并水平放置。进度条还可以选择显示一个字符串,这个字符串在进度条矩形的中央位置上显示。这个字符串缺省时为耗时任务已完成的百分比。这个字符串可用JProgressBar.setString方法定制。图11-1中示出的小应用程序创建了不同配置的进度条
3、。 例11-1列出了图11-1中示出的小应用程序的代码。例11-1 各种配置的进度条import javax.swing.*;import java.awt.*;import java.awt.event.*; public class Test extends JApplet private JProgressBar progressBars = new JProgressBar(),new JProgressBar(),new JProgressBar(),new JProgressBar();public void init() Container contentPane = getCo
4、ntentPane();contentPane.setLayout(new FlowLayout();for(int i=0; i progressBars.length; +i) JProgressBar pb = progressBarsi;if(i = 0) pb.setStringPainted(true);pb.setString(Custom String);if(i = 1) pb.setOrientation(JProgressBar.VERTICAL);pb.setForeground(Color.yellow);pb.setMaximum(1000);pb.setValue
5、(50);pb.setBorder(BorderFactory.createRaisedBevelBorder();if(i = 2) pb.setForeground(Color.blue);pb.setBorderPainted(false);pb.setValue(50);pb.setStringPainted(true);if(i = 3) pb.setOrientation(JProgressBar.VERTICAL);pb.setForeground(Color.red);pb.setValue(90);pb.setStringPainted(true);pb.setBorder(
6、BorderFactory.createEtchedBorder();contentPane.add(pb);这个小应用程序创建了一组进度条,并为每个进度条设置了各种不同的属性,从而产生了图11-1中示出的各种不同配置。11.1.1 进度条与线程例11-2 使用JProgressBarimport javax.swing.*;import java.awt.*;import java.awt.event.*; public class Test extends JApplet private JProgressBar progressBar = new JProgressBar();priva
7、te JButton startButton = new JButton(start);public void init() Container contentPane = getContentPane();contentPane.setLayout(new FlowLayout();contentPane.add(startButton);contentPane.add(progressBar);progressBar.setStringPainted(true);startButton.addActionListener(new ActionListener() public void a
8、ctionPerformed(ActionEvent e) (new UpdateThread().start(););class UpdateThread extends Thread Runnable update, finish;int value, min, max, increment;public UpdateThread() max = progressBar.getMaximum(); min = progressBar.getMinimum();update = new Runnable() public void run() value = progressBar.getV
9、alue() + increment;updateProgressBar(value);finish = new Runnable() public void run() updateProgressBar(min);public void run() startButton.setEnabled(false);while(value + increment = max) simulateTimeConsumingActivity();SwingUtilities.invokeLater(update);SwingUtilities.invokeLater(finish);startButto
10、n.setEnabled(true);private void updateProgressBar(int value) progressBar.setValue(value);private void simulateTimeConsumingActivity() try Thread.currentThread().sleep(1000);increment = (max - min) / 10;catch(InterruptedException e) e.printStackTrace();11.1.2 JProgressBar属性11.1.3 JProgressBar事件例11-3
11、监视一个进度条的值import javax.swing.*;import javax.swing.event.*;import java.awt.*;import java.awt.event.*; public class Test extends JApplet private JProgressBar pb = new JProgressBar();public void init() Container contentPane = getContentPane();final JButton startButton = new JButton(start);contentPane.se
12、tLayout(new FlowLayout();contentPane.add(startButton);contentPane.add(pb);startButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) (new GetInfoThread(pb).start(););pb.addChangeListener(new ChangeListener() public void stateChanged(ChangeEvent e) int min = pb.getM
13、inimum(), max = pb.getMaximum();int value = pb.getValue();showStatus(Min: + min + , Max: + max +, Value: + value););class GetInfoThread extends Thread Runnable update, finish;JProgressBar pb;int value, min, max, increment;public GetInfoThread(JProgressBar progressBar) pb = progressBar;max = pb.getMa
14、ximum(); min = pb.getMinimum();update = new Runnable() public void run() value = pb.getValue() + increment;pb.setValue(value);finish = new Runnable() public void run() value = min;pb.setValue(value);public void run() while(value + increment = max) simulateTimeConsumingActivity();SwingUtilities.invok
15、eLater(update);SwingUtilities.invokeLater(finish);private void simulateTimeConsumingActivity() try Thread.currentThread().sleep(1000);increment = (max - min) / 10;catch(InterruptedException e) e.printStackTrace();11.1.4 JProgressBar类总结11.1.5 AWT兼容11.2 JSlider例11-4 一个简单的JSlider例子import java.awt.*;imp
16、ort java.awt.event.*;import javax.swing.*;import java.util.*; public class Test extends JApplet public void init() Container contentPane = getContentPane();JSlider slider = new JSlider();contentPane.add(slider, BorderLayout.NORTH);11.2.1 填充的滑杆例11-5 一个填充的滑杆import java.awt.*;import java.awt.event.*;im
17、port javax.swing.*; public class Test extends JApplet public Test() Container contentPane = getContentPane();JSlider slider = new JSlider();slider.putClientProperty(JSlider.isFilled,Boolean.TRUE);contentPane.add(slider, BorderLayout.NORTH);11.2.2 滑杆间隔标记例11-6 显示滑杆的间隔标记import java.awt.*;import java.aw
18、t.event.*;import javax.swing.*;import java.util.*; public class Test extends JApplet public void init() Container contentPane = getContentPane();JSlider slider = new JSlider();JPanel controlPanel = new ControlPanel(slider);contentPane.setLayout(new BorderLayout(0,40);contentPane.add(controlPanel, Bo
19、rderLayout.NORTH);contentPane.add(slider, BorderLayout.CENTER);class ControlPanel extends JPanel public ControlPanel(final JSlider slider) JCheckBox paintTicks = new JCheckBox(Paint Ticks);JComboBox minorSpacing = new JComboBox(),majorSpacing = new JComboBox();minorSpacing.addItem(0);minorSpacing.ad
20、dItem(3);minorSpacing.addItem(5);minorSpacing.addItem(10);minorSpacing.addItem(20);majorSpacing.addItem(0);majorSpacing.addItem(3);majorSpacing.addItem(5);majorSpacing.addItem(10);majorSpacing.addItem(20);add(paintTicks);add(new JLabel(Minor Tick Spacing:);add(minorSpacing);add(new JLabel(Major Tick
21、 Spacing:);add(majorSpacing);paintTicks.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) JCheckBox cb = (JCheckBox)e.getSource();slider.setPaintTicks(cb.isSelected();slider.repaint(););minorSpacing.addItemListener(new ItemListener() public void itemStateChanged(ItemE
22、vent e) JComboBox cb = (JComboBox)e.getSource();int spacing = Integer.parseInt(String)cb.getSelectedItem();slider.setMinorTickSpacing(spacing);slider.revalidate(););majorSpacing.addItemListener(new ItemListener() public void itemStateChanged(ItemEvent e) JComboBox cb = (JComboBox)e.getSource();int s
23、pacing = Integer.parseInt(String)cb.getSelectedItem();slider.setMajorTickSpacing(spacing);slider.revalidate(););11.2.3 滑杆标签例11-7 显示缺省的JSlider标签import java.awt.*;import java.awt.event.*;import javax.swing.*; public class Test extends JApplet public Test() Container contentPane = getContentPane();JSli
24、der slider = new JSlider();slider.setPaintLabels(true);slider.setMajorTickSpacing(20);contentPane.add(slider, BorderLayout.NORTH);例11-8 定制滑杆标签import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*; public class Test extends JApplet public Test() Container contentPane = get
25、ContentPane();JSlider slider = new JSlider();Icon icons = new ImageIcon(basketball.gif), new ImageIcon(baseball.gif), new ImageIcon(soccer.gif), new ImageIcon(clipboard.gif), new ImageIcon(filmstrip.gif), new ImageIcon(crab.gif), ;Hashtable table = new Hashtable();for(int i=0, loc=0; i icons.length;
26、 i+, loc += 20) table.put(new Integer(loc), new JLabel(Integer.toString(loc), iconsi,JLabel.LEFT); slider.setLabelTable(table);slider.setPaintLabels(true);slider.setMajorTickSpacing(20);contentPane.add(slider, BorderLayout.NORTH);11.2.4 反转滑杆值例11-9 中列出图11-10中示出的小应用程序的代码import java.awt.*;import java.a
27、wt.event.*;import javax.swing.*; public class Test extends JApplet private JCheckBox checkBox = new JCheckBox(Invert);private JSlider sliders = new JSlider(), new JSlider(JSlider.VERTICAL) ;public Test() Container contentPane = getContentPane();contentPane.setLayout(new FlowLayout();contentPane.add(
28、checkBox);for(int i=0; i sliders.length; +i) slidersi.setPaintLabels(true);slidersi.setMajorTickSpacing(20);contentPane.add(slidersi);checkBox.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) for(int i=0; i sliders.length; +i)slidersi.setInverted(checkBox.isSelected(
29、););11.2.5 滑杆的外延值例11-10 设置一个滑杆的外延值import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*; public class Test extends JApplet public Test() Container contentPane = getContentPane();JSlider slider = new JSlider();JPanel controlPanel = new ControlPanel(slider);contentPane.add(controlPanel, BorderLayout.NORTH);contentPane.add(slider, BorderLayout.SOUTH);slider.addChangeListener(new ChangeListener() public void stateChanged(ChangeEvent e) JSlider s = (JSlider)e.getSource();showStatus(Min: + s.getMinimum() + , Max: + s.get
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1