第11章+进度条.docx

上传人:b****8 文档编号:9479993 上传时间:2023-02-04 格式:DOCX 页数:17 大小:17.89KB
下载 相关 举报
第11章+进度条.docx_第1页
第1页 / 共17页
第11章+进度条.docx_第2页
第2页 / 共17页
第11章+进度条.docx_第3页
第3页 / 共17页
第11章+进度条.docx_第4页
第4页 / 共17页
第11章+进度条.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

第11章+进度条.docx

《第11章+进度条.docx》由会员分享,可在线阅读,更多相关《第11章+进度条.docx(17页珍藏版)》请在冰豆网上搜索。

第11章+进度条.docx

第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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1