JRadionButton类
5.5 JRadionButton类
当我们希望创建一个相斥的可切换组件组时我们可以使用JRadioButton。尽管由技术上来说,
我们可以将一组JCheckBox组件放在一个ButtonGroup中,并且每次只有一个可以选中,但是
他们看起来并不正确。至少由预定义的观感类型来看,JRadioButton与JCheckBox组件看起来
是不同的,如图5-10所示。这种外观上的区别可以告诉终端用户可以期望组件的特定行为。
JRadioButton是由几方面构成的。类似于JToggleButton与JCheckBox,JRadioButton也使用
一个ToggleButtonModel来表示其数据模型。他使用ButtonGroup通过AbstractButton来提供
互斥的组合,并且用户界面委托是RadioButtonUI。
下面我们就来探讨如何使用JRadioButton的不同方同。
5.5.1 创建JRadioButton组件
与JCheckBox以及JToggleButton类似,JRadioButton有八个构造函数:
public JRadioButton()
JRadioButton aRadioButton = new JRadioButton();
public JRadioButton(Icon icon)
JRadioButton aRadioButton = new JRadioButton(new DiamondIcon(Color.CYAN, false));
aRadioButton.setSelectedIcon(new DiamondIcon(Color.BLUE, true));
public JRadioButton(Icon icon, boolean selected)
UIClassID  String  只读
5.5.3 将JRadioButton组件组合为一个ButtonGroup JRadioButton是唯一一个为了正常作用需要放在ButtonGroup中的JToggleButton子类。仅仅是创建一组单选按钮并将其放置在屏幕中是不足够的。除了将每一个单选按钮放在一个容器中之外,我们需要创建一个ButtonGroup,并且将每一个单选按钮放在相同的ButtonGroup中。一旦所有的JRadioButton项目都放在一个组合中,当一个未选中的单选按钮被选中时,ButtonGroup会使得当前被选中的单选按钮取消选中。
将一个JRaidonButton组件集合放在一个ButtonGroup中是一个基本的四步过程:1 为组合创建一个容器
JPanel aPanel = new JPanel(new GridLayout(0,1));
2 在窗口周围放置一个边框以标识组合。这是可选的一步,但是我们通常希望放置一个边框来为用户标识组合。我们将会在第7章中了解更多关于边框的内容。
Border border = ateTitledBorder("Slice Count");
aPanel.setBorder(border)
3 创建一个ButtonGroup
ButtonGroup aGroup = new ButtonGroup();
4 对于每一个可选择的选项,创建一个JRadioButton,将其添加到容器中,然后将其添加到组合中。
JRadioButton aRadioButton = new JRadioButton();
aPanel.add(aRadioButton);
aGroup.add(aRadioButton);
我们也许会发现整个过程,特殊是第四步,在一段时间之后会显得繁琐,特殊是当我们添加处理选中事件步骤时更是如此。列表5-5所示的助手类,具有一个静态的createRadioButtonGrouping(String elements[], String title)方法,证明是有用的。这个方法需要一个单选按钮的String的数组以及边框标题,然后在一个具有标题边框的JPanel内创建一个带有通常ButtonGroup的JRadioButton对象集合。
package net.ariel.ch05;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.Border;
public class RadioButtonUtils {
private RadioButtonUtils() {
}
public static Container createRadioButtonGrouping(String elements[], String title) {
JPanel panel = new JPanel(new GridLayout(0,1));
if(title != null) {
Border border =
panel.setBorder(border);
}
ButtonGroup group = new ButtonGroup();
JRadioButton aRadioButton;
for(int i=0, n=elements.length; inew JRadioButton(elements[i]);
panel.add(aRadioButton);
group.add(aRadioButton);
}
return panel;
}
}
现在我们可以更为简单的创建组合了,如列表5-6中的示例程序所示。
/**
*
*/
package net.ariel.ch05;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.JFrame;
/
**
* @author mylxiaoyi
*
*/
public class GroupRadio {
private static final String sliceOptions[] = {
"4 slices", "8 slices", "12 slices", "16 slices"
};
private static final String crustOptions[] = {checkbox和radiobutton的区别
"Sicilian", "Thin Crust", "Thick Crust", "Stuffed Crust"
};
/
**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Runnable runner = new Runnable() {
public void run() {
JFrame frame = new JFrame("Grouping Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container sliceContainer = ateRadioButtonGrouping(sliceOptions, "Slice Count");
Container crustContainer = ateRadioButtonGrouping(crustOptions, "Crust Type");
frame.add(sliceContainer, BorderLayout.WEST);
frame.add(crustContainer, BorderLayout.EAST);
frame.setSize(300, 200);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。