javaGUI学习47:Swing-进度条、滑杆和分隔条

人们经常用进度条反映耗时任务已完成的百分比,用ProgressMonitor和ProgressMonitorInputStream实用工具来反映一个任务的进度信息通常会更容易。

JProgessBar 和JSlider 与JSeparator 一样,用来描述一个介于最小值和最大值之间的值。因此,与JProgessBar和JSlider相关的模型是BoundedRangeModel接口的一个实现。

JSeparetor是绘制一条蚀刻线的组件,它把逻辑上相关的组件分隔在一组,JSeparator组件可水平地或垂直地放置。

1、JProgessBar

JProgessBar是一个简单的组件,它一般是一种颜色部分或完全填充的矩形。缺省情况下,进度条配备了一个凹陷的边框,并水平放置。

进度条还可选择显示一个字符串,这个字符串在进度条矩形的中央位置上显示。这个字符串缺省时为耗时任务已完成的百分比。这个字符串可用JProgessBar . setString 方法定制。

1.1 进度条与线程

进度条主要用于反映一个耗时任务已完成的时间比例或剩余时间比例。但是,耗时任务不应当从事件派发线程中完成,而 Swing组件应当只从事件批发线程中更新。那么,如何在一个独立线程的基础上更新一个进度条呢?可以通过用SwingUtilities . invokeLater方法使一个独立线程更新一个进度条来解决这个矛盾。

小应用程序递增一个进度条的值,每秒递增一次,从进度条的最小值递增到它的最大值。激活这个小应用程序中的按钮就开始了这个递增过程。

2、JSlider

与JProgessBar一样,JSlider显示一个介于最小值与最大值之间的值。进度条显示的值只能由程序操纵,而滑杆的值能够直接拖动滑杆柄或单击滑杆槽来操纵。Swing滑杆包含一个可推动的柄,还可以带主要的和次要的间隔标记及标签。

2.1 填充的滑杆

如果–个滑杆的界面样式是Java界面样式,则它就能与图11-6中示出的那样,通过设置一个客户属性“JSlider. isFilled”来填充滑槽。

2.2 滑杆间隔标记

滑杆能够绘制间隔标记,间隔标记是用来描述与滑杆有关的特定值的。间隔标记有主要标记和次要标记之别。主要间隔标记表示一些特定的值,而次要标记表示介于主要标记之间的值。主要和次要间隔标记的外观取决于滑杆的界面样式,但主要间隔标记一般比次要间隔标记大。

有三个方法与绘制滑杆的间隔标记有关:setPaintTicks ()、setMinorTickSpacing ()和setMajorTickSpacing ()。setPaintTicks ()带一个boolean变量,指示是否应该绘制间隔标记。setMi-norTickSpacing ()和setMajorTickSpacing ()方法带–些integer值,这些值分别表示主要标记和次要标记之间的单元数量。关于这些方法有两点需要指出:

首先,用一个true值调用setPaintTicks ()导致仅当设置了主要或次要间隔标记之间的间隙时才绘制间隔标记。换言之,如果不用一个对于0的值调用setMinorTickSpacing ()或setMa-jorTickSpacing (),则调用setPaintTicks ( true)将不会绘制间隔标记。

其次,传送给setMinorTickSpacing ()和setMajorTickSpacing ()方法的integer值不直接表示间隔标记之间的像素点数。这些integer值表示的是间隔标记之间的单元数。例如,调用setMa-jorTickSpacing (25)指定主要间隔标记之间应该相隔25个单元。如果一个滑杆的最小值和最大值分别是0和100,则指定主要间隔标记为25将产生5个主要间隔标记–分别在0、25、50、75和100处绘制。如果改变了这个滑杆的大小,这5个主要标记将重新绘制。

2.3 滑杆标签

除了显示间隔标记外,JSlider实例还能显示滑杆标签。滑杆标签是在滑杆的主要间隔标记位置上绘制的标签。JSlider能够自己产生数字标签、还能通过提供一个Hashtable来指定定制标签。Hashtable 中包含表示值和相应标签的Integer/Jl abel参数对。

2.4 反转滑杆值

所有的滑杆都维护一个inverted 属性,这个属性决定滑杆值的递增方向。缺省情况下,inverted属性的值为false;并且,水平滑杆的值从左向右递增,垂直滑杆的值从下向上递增。当inverted属性的值为true时,水平滑杆的值从右向左递增,垂直滑杆的值则从上向下递增。

2.5 滑杆的外延值

滑杆的外延确定滑杆值的较高范围。例如,如果一个滑杆的最大值为100,外延值为20.那么这个滑杆的值将不会超过“最大值-外延值”。

2.6 事件

变化事件

3、JSeparator

分隔条通常用于分隔(或组织)组件或组件组。尽管有人说分隔条是Swing 的最简单组件,但如果对布局管理器及组件的最小尺寸、最大尺寸和首选尺寸没有很好的了解,则在使用它时也有很多困惑。

3.1 分隔条与框

分隔条非常适合于Swing 的框容器—─Box类的实例,因为框可在水平方向上或在垂直方向上排列组件。一般来说,垂直分隔条放在水平框中,而水平分隔条放在垂直框中。

3.2 事件

没有自己的事件,都是从JComponent继承来的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Java GUI编程实现计算器,你可以使用Swing和AWT这两种Java GUI工具包之一。 以下是一个简单的Java GUI计算器的实现示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Calculator extends JFrame implements ActionListener { private JButton[] numberButtons; private JButton[] operatorButtons; private JButton clearButton, equalsButton, decimalButton; private JTextField textField; private double num1 = 0, num2 = 0, result = 0; private char operator; public Calculator() { setTitle("Calculator"); // Create the number buttons numberButtons = new JButton[10]; for (int i = 0; i < 10; i++) { numberButtons[i] = new JButton(String.valueOf(i)); } // Create the operator buttons operatorButtons = new JButton[4]; operatorButtons[0] = new JButton("+"); operatorButtons[1] = new JButton("-"); operatorButtons[2] = new JButton("*"); operatorButtons[3] = new JButton("/"); // Create the clear, equals, and decimal buttons clearButton = new JButton("C"); equalsButton = new JButton("="); decimalButton = new JButton("."); // Create the text field textField = new JTextField(10); textField.setEditable(false); // Set the layout manager and add the components setLayout(new GridBagLayout()); GridBagConstraints gc = new GridBagConstraints(); gc.gridx = 0; gc.gridy = 0; gc.gridwidth = 4; add(textField, gc); gc.gridwidth = 1; gc.gridy = 1; for (int i = 0; i < 10; i++) { gc.gridx = i % 3; gc.gridy = i / 3 + 2; add(numberButtons[i], gc); numberButtons[i].addActionListener(this); } gc.gridx = 0; gc.gridy = 5; add(operatorButtons[0], gc); operatorButtons[0].addActionListener(this); gc.gridx = 1; add(operatorButtons[1], gc); operatorButtons[1].addActionListener(this); gc.gridx = 2; add(operatorButtons[2], gc); operatorButtons[2].addActionListener(this); gc.gridx = 3; add(operatorButtons[3], gc); operatorButtons[3].addActionListener(this); gc.gridx = 0; gc.gridy = 6; add(clearButton, gc); clearButton.addActionListener(this); gc.gridx = 1; add(equalsButton, gc); equalsButton.addActionListener(this); gc.gridx = 2; add(decimalButton, gc); decimalButton.addActionListener(this); setSize(200, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent e) { for (int i = 0; i < 10; i++) { if (e.getSource() == numberButtons[i]) { textField.setText(textField.getText() + i); } } if (e.getSource() == decimalButton) { textField.setText(textField.getText() + "."); } if (e.getSource() == clearButton) { textField.setText(""); num1 = 0; num2 = 0; result = 0; operator = ' '; } if (e.getSource() == operatorButtons[0]) { num1 = Double.parseDouble(textField.getText()); operator = '+'; textField.setText(""); } if (e.getSource() == operatorButtons[1]) { num1 = Double.parseDouble(textField.getText()); operator = '-'; textField.setText(""); } if (e.getSource() == operatorButtons[2]) { num1 = Double.parseDouble(textField.getText()); operator = '*'; textField.setText(""); } if (e.getSource() == operatorButtons[3]) { num1 = Double.parseDouble(textField.getText()); operator = '/'; textField.setText(""); } if (e.getSource() == equalsButton) { num2 = Double.parseDouble(textField.getText()); switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; break; } textField.setText(Double.toString(result)); } } public static void main(String[] args) { new Calculator(); } } ``` 这个示例应该可以实现一个简单的Java GUI计算器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值