第11章+进度条.docx
- 文档编号:9479993
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:17
- 大小:17.89KB
第11章+进度条.docx
《第11章+进度条.docx》由会员分享,可在线阅读,更多相关《第11章+进度条.docx(17页珍藏版)》请在冰豆网上搜索。
第11章+进度条
第11章进度条、滑杆和分隔条
本章介绍三个Swing组件:
JProgressBar、JSlider和JSeparator。
人们经常用进度条反映耗时任务已完成的百分比,本章将提供这样一个例子。
但是,用ProgressMonitor和ProgressMonitorInputStream实用工具来反映一个任务的进度信息通常会更容易。
“进度监控”小节中讨论了ProgressMonitor和ProgressMonitorInputStream实用工具。
JProgressBar和JSlider与JSeparator一样,用来描述一个介于最小值和最大值之间的值。
因此,与JProgressBar和JSlider相关的模型是BoundedRangeModel接口的一个实现。
JSeparator是绘制一条蚀刻线的组件,它把逻辑上相关的组件分隔在一组,JSeparator组件可水平地垂直地放置。
11.1JProgressBar
JProgressBar是一个简单的组件,它一般是一种颜色部分或完全填充的矩形。
缺省情况下,进度条配备了一个凹陷的边框,并水平放置。
进度条还可以选择显示一个字符串,这个字符串在进度条矩形的中央位置上显示。
这个字符串缺省时为耗时任务已完成的百分比。
这个字符串可用JProgressBar.setString方法定制。
图11-1中示出的小应用程序创建了不同配置的进度条。
例11-1列出了图11-1中示出的小应用程序的代码。
例11-1各种配置的进度条
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassTestextendsJApplet{
privateJProgressBar[]progressBars={
newJProgressBar(),
newJProgressBar(),
newJProgressBar(),
newJProgressBar()
};
publicvoidinit(){
ContainercontentPane=getContentPane();
contentPane.setLayout(newFlowLayout());
for(inti=0;i JProgressBarpb=progressBars[i]; if(i==0){ pb.setStringPainted(true); pb.setString("CustomString"); } if(i==1){ pb.setOrientation(JProgressBar.VERTICAL); pb.setForeground(Color.yellow); pb.setMaximum(1000); pb.setValue(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( BorderFactory.createEtchedBorder()); } contentPane.add(pb); } } } 这个小应用程序创建了一组进度条,并为每个进度条设置了各种不同的属性,从而产生了图11-1中示出的各种不同配置。 11.1.1进度条与线程 例11-2使用JProgressBar importjavax.swing.*; importjava.awt.*; importjava.awt.event.*; publicclassTestextendsJApplet{ privateJProgressBarprogressBar=newJProgressBar(); privateJButtonstartButton=newJButton("start"); publicvoidinit(){ ContainercontentPane=getContentPane(); contentPane.setLayout(newFlowLayout()); contentPane.add(startButton); contentPane.add(progressBar); progressBar.setStringPainted(true); startButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ (newUpdateThread()).start(); } }); } classUpdateThreadextendsThread{ Runnableupdate,finish; intvalue,min,max,increment; publicUpdateThread(){ max=progressBar.getMaximum(); min=progressBar.getMinimum(); update=newRunnable(){ publicvoidrun(){ value=progressBar.getValue()+increment; updateProgressBar(value); } }; finish=newRunnable(){ publicvoidrun(){ updateProgressBar(min); } }; } publicvoidrun(){ startButton.setEnabled(false); while(value+increment<=max){ simulateTimeConsumingActivity(); SwingUtilities.invokeLater(update); } SwingUtilities.invokeLater(finish); startButton.setEnabled(true); } privatevoidupdateProgressBar(intvalue){ progressBar.setValue(value); } privatevoidsimulateTimeConsumingActivity(){ try{ Thread.currentThread().sleep(1000); increment=(max-min)/10; } catch(InterruptedExceptione){ e.printStackTrace(); } } } } 11.1.2JProgressBar属性 11.1.3JProgressBar事件 例11-3监视一个进度条的值 importjavax.swing.*; importjavax.swing.event.*; importjava.awt.*; importjava.awt.event.*; publicclassTestextendsJApplet{ privateJProgressBarpb=newJProgressBar(); publicvoidinit(){ ContainercontentPane=getContentPane(); finalJButtonstartButton=newJButton("start"); contentPane.setLayout(newFlowLayout()); contentPane.add(startButton); contentPane.add(pb); startButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ (newGetInfoThread(pb)).start(); } }); pb.addChangeListener(newChangeListener(){ publicvoidstateChanged(ChangeEvente){ intmin=pb.getMinimum(),max=pb.getMaximum(); intvalue=pb.getValue(); showStatus("Min: "+min+",Max: "+max+ ",Value: "+value); } }); } } classGetInfoThreadextendsThread{ Runnableupdate,finish; JProgressBarpb; intvalue,min,max,increment; publicGetInfoThread(JProgressBarprogressBar){ pb=progressBar; max=pb.getMaximum(); min=pb.getMinimum(); update=newRunnable(){ publicvoidrun(){ value=pb.getValue()+increment; pb.setValue(value); } }; finish=newRunnable(){ publicvoidrun(){ value=min; pb.setValue(value); } }; } publicvoidrun(){ while(value+increment<=max){ simulateTimeConsumingActivity(); SwingUtilities.invokeLater(update); } SwingUtilities.invokeLater(finish); } privatevoidsimulateTimeConsumingActivity(){ try{ Thread.currentThread().sleep(1000); increment=(max-min)/10; } catch(InterruptedExceptione){ e.printStackTrace(); } } } 11.1.4JProgressBar类总结 11.1.5AWT兼容 11.2JSlider 例11-4一个简单的JSlider例子 importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; importjava.util.*; publicclassTestextendsJApplet{ publicvoidinit(){ ContainercontentPane=getContentPane(); JSliderslider=newJSlider(); contentPane.add(slider,BorderLayout.NORTH); } } 11.2.1填充的滑杆 例11-5一个填充的滑杆 importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; publicclassTestextendsJApplet{ publicTest(){ ContainercontentPane=getContentPane(); JSliderslider=newJSlider(); slider.putClientProperty("JSlider.isFilled",Boolean.TRUE); contentPane.add(slider,BorderLayout.NORTH); } } 11.2.2滑杆间隔标记 例11-6显示滑杆的间隔标记 importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; importjava.util.*; publicclassTestextendsJApplet{ publicvoidinit(){ ContainercontentPane=getContentPane(); JSliderslider=newJSlider(); JPanelcontrolPanel=newControlPanel(slider); contentPane.setLayout(newBorderLayout(0,40)); contentPane.add(controlPanel,BorderLayout.NORTH); contentPane.add(slider,BorderLayout.CENTER); } classControlPanelextendsJPanel{ publicControlPanel(finalJSliderslider){ JCheckBoxpaintTicks=newJCheckBox("PaintTicks"); JComboBoxminorSpacing=newJComboBox(), majorSpacing=newJComboBox(); minorSpacing.addItem("0"); minorSpacing.addItem("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(newJLabel("MinorTickSpacing: ")); add(minorSpacing); add(newJLabel("MajorTickSpacing: ")); add(majorSpacing); paintTicks.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ JCheckBoxcb=(JCheckBox)e.getSource(); slider.setPaintTicks(cb.isSelected()); slider.repaint(); } }); minorSpacing.addItemListener(newItemListener(){ publicvoiditemStateChanged(ItemEvente){ JComboBoxcb=(JComboBox)e.getSource(); intspacing=Integer.parseInt( (String)cb.getSelectedItem()); slider.setMinorTickSpacing(spacing); slider.revalidate(); } }); majorSpacing.addItemListener(newItemListener(){ publicvoiditemStateChanged(ItemEvente){ JComboBoxcb=(JComboBox)e.getSource(); intspacing=Integer.parseInt( (String)cb.getSelectedItem()); slider.setMajorTickSpacing(spacing); slider.revalidate(); } }); } } } 11.2.3滑杆标签 例11-7显示缺省的JSlider标签 importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; publicclassTestextendsJApplet{ publicTest(){ ContainercontentPane=getContentPane(); JSliderslider=newJSlider(); slider.setPaintLabels(true); slider.setMajorTickSpacing(20); contentPane.add(slider,BorderLayout.NORTH); } } 例11-8定制滑杆标签 importjava.util.*; importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; publicclassTestextendsJApplet{ publicTest(){ ContainercontentPane=getContentPane(); JSliderslider=newJSlider(); Icon[]icons={ newImageIcon("basketball.gif"), newImageIcon("baseball.gif"), newImageIcon("soccer.gif"), newImageIcon("clipboard.gif"), newImageIcon("filmstrip.gif"), newImageIcon("crab.gif"), }; Hashtabletable=newHashtable(); for(inti=0,loc=0;i table.put(newInteger(loc), newJLabel(Integer.toString(loc), icons[i], JLabel.LEFT)); } slider.setLabelTable(table); slider.setPaintLabels(true); slider.setMajorTickSpacing(20); contentPane.add(slider,BorderLayout.NORTH); } } 11.2.4反转滑杆值 例11-9中列出图11-10中示出的小应用程序的代码 importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; publicclassTestextendsJApplet{ privateJCheckBoxcheckBox=newJCheckBox("Invert"); privateJSlider[]sliders={newJSlider(), newJSlider(JSlider.VERTICAL)}; publicTest(){ ContainercontentPane=getContentPane(); contentPane.setLayout(newFlowLayout()); contentPane.add(checkBox); for(inti=0;i sliders[i].setPaintLabels(true); sliders[i].setMajorTickSpacing(20); contentPane.add(sliders[i]); } checkBox.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ for(inti=0;i sliders[i].setInverted(checkBox.isSelected()); } }); } } 11.2.5滑杆的外延值 例11-10设置一个滑杆的外延值 importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; importjavax.swing.event.*; publicclassTestextendsJApplet{ publicTest(){ ContainercontentPane=getContentPane(); JSliderslider=newJSlider(); JPanelcontrolPanel=newControlPanel(slider); contentPane.add(controlPanel,BorderLayout.NORTH); contentPane.add(slider,BorderLayout.SOUTH); slider.addChangeListener(newChangeListener(){ publicvoidstateChanged(ChangeEvente){ JSliders=(JSlider)e.getSource(); showStatus("Min: "+s.getMinimum()+ ",Max: "+s.get
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 进度条