java按钮组的建造
假如我们想单选钮保持“异或”状态,我们必需增加它们到一个按钮组中,这险些同老AWT中的要领沟通但越发的机动。在下面将要证明的措施例子是,一些AbstruactButton能被增加到一个ButtonGroup中。
为制止反复一些代码,这个措施操作映射来生差异范例的按钮组。这会在makeBPanel中看到,makeBPanel建设了一个按钮组和一个JPanel,而且为数组中的每个String就是makeBPanel的第二个自变量增加一个类工具,由它的第一个自变量举办声明:
//: ButtonGroups.java
// Uses reflection to create groups of different
// types of AbstractButton.
package c13.swing;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.lang.reflect.*;
public class ButtonGroups extends JPanel {
static String[] ids = {
"June", "Ward", "Beaver",
"Wally", "Eddie", "Lumpy",
};
static JPanel
makeBPanel(Class bClass, String[] ids) {
ButtonGroup bg = new ButtonGroup();
JPanel jp = new JPanel();
String title = bClass.getName();
title = title.substring(
title.lastIndexOf('.') + 1);
jp.setBorder(new TitledBorder(title));
for(int i = 0; i < ids.length; i++) {
AbstractButton ab = new JButton("failed");
try {
// Get the dynamic constructor method
// that takes a String argument:
Constructor ctor = bClass.getConstructor(
new Class[] { String.class });
// Create a new object:
ab = (AbstractButton)ctor.newInstance(
new Object[]{ids[i]});
} catch(Exception ex) {
System.out.println("can't create " +
bClass);
}
bg.add(ab);
jp.add(ab);
}
return jp;
}
public ButtonGroups() {
add(makeBPanel(JButton.class, ids));
add(makeBPanel(JToggleButton.class, ids));
add(makeBPanel(JCheckBox.class, ids));
add(makeBPanel(JRadioButton.class, ids));
}
public static void main(String args[]) {
Show.inFrame(new ButtonGroups(), 500, 300);
}
} ///:~
边框标题由类名剔除了所有的路径信息而来。AbstractButton初始化为一个JButton,JButtonr的标签产生“失效”,因此假如我们忽略这个异常信息,我们会在屏幕上一直看到这个问题。getConstructor()要领发生了一个通过getConstructor()要领安顿自变量数组范例到类数组的构建器工具,然后所有我们要做的就是挪用newInstance(),通过它一个数组工具包括我们当前的自变量——在这种例子中,就是ids数组中的字符串。
这样增加了一些更巨大的内容到这个简朴的措施中。为了使“异或”行为拥有按钮,我们建设一个按钮组并增加每个按钮到我们所需的组中。当我们运行这个措施时,我们会留意到所有的按钮除了JButton城市向我们展示“异或”行为。