Toggle Buttons(一)(一)

2014-11-24 00:34:46 · 作者: · 浏览: 0

现在我们已经了解了相对简单的Swing组件JLabel与JButton的功能,现在我们来了解一些更为活跃的组件,特别是这些可以切换的组件。这些称之为可切换的组件-JToggleButton,JCheckBox与JRadioButton-为我们的用户提供了由一个选项集合中进行选择的方法。这些选项或者是打开,或者是关闭的,或者是允许,或者是禁止的。当表示在一个ButtonGroup中时,每次组中只有一个选项可以被选中。为了处理选中状态,组件与ToogleButtonModel共享一个共同的数据模型。下面我们来了解一下数据模型,使用ButtonGroup的组件组合机制,以及单个的组件。

5.1 ToggleButtonModel类
JToggleButton.ToggleButtonMode类是JToggleButton的一个公开内联类。这个类自定义了DefaultButtonModel类的行为,实现了ButtonModel接口。

自定义行为影响了ButtonGroup组件中所有AbstractButto的数据模型,ButtonGroup会在稍后的进行探讨。简单来说,一个ButtonGroup是AbstractButton组件的逻辑组合。在任意时刻,ButtonGroup中只有一个AbstractButton组件的selected属性被设置true,其他的必须为false。这并不意味着在组合中任意时刻只存在一个被选中的组件。如果ButtonGroup中的多个组件共享一个ButtonModel,那么在组合中就可以存在多个被选中的组件。如果没有组件共享模型,那么在组合中用户至多可以选中一个组件。一旦用户已经选择了一个组件,用户并不能交互的取消选择。然而,通过编程我们可以取消选中所有的组合元素。

JToggleButton.ToggleButtonModel定义如下:

public class ToggleButtonModel extends DefaultButtonModel {
// Constructors
public ToggleButtonModel();
// Properties
public boolean isSelected();
public void setPressed(boolean newValue);
public void setSelected(boolean newvalue);
}ToggleButtonModel类为JToogleButton以及其后面章节中所描述的子类JCheckBox与JRadioButton,以及将在第6章进行描述的JCheckBoxMenuItem与JRadioButtonMenuItem类定义了默认的数据模型。

5.2 ButtonGroup类
在描述ButtonGroup类之前,我们先来演示其用法。列表5-1中的程序创建了使用ToggleButtonModel的对象并将其放在一个组合中。正如程序所演示的,除了向屏幕容器添加组件之外,我们必须将每一个组件添加到相同的ButtonGroup中。这导致了对于每一个组件的一对add()方法调用。而且,按钮组合的容器会将组件放在一列中,并且使用一个带有标题的边框为用户标识组合,尽管这些并不是必须的。图5-1显示了程序的输出。

package swingstudy.ch04;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;

import javax.swing.AbstractButton;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JToggleButton;
import javax.swing.border.Border;

public class AButtonGroup {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Runnable runner = new Runnable() {
public void run() {
JFrame frame = new JFrame("Button Group");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel(new GridLayout(0,1));
Border border = BorderFactory.createTitledBorder("Examples");
panel.setBorder(border);

ButtonGroup group = new ButtonGroup();
AbstractButton abstract1 = new JToggleButton("Toggle Button");
panel.add(abstract1);
group.add(abstract1);

AbstractButton abstract2 = new JRadioButton("Radio Button");
panel.add(abstract2);
group.add(abstract2);

AbstractButton abstract3 = new JCheckBox("Check Box");
panel.add(abstract3);
group.add(abstract3);

AbstractButton abstract4 = new JRadioButtonMenuItem("Radio Button Menu Item");
panel.add(abstract4);
group.add(abstract4);

AbstractButton abstract5 = new JCheckBoxMenuItem("Check Box Menu Item");
panel.add(abstract5);
group.add(abstract5);

frame.add(panel, BorderLayout.CENTER);
frame.setSize(300, 200);
frame.setVisible(true);

}
};
EventQueue.invokeLater(runner);
}

}

正如前面所说的,ButtonGroup类表示Abstract