今天主要接触一下按钮群组(Button groups)的概念,顺便介绍一种创建按钮的新方法。先看下面的代码。
import
javax.swing.
*
;
import java.awt. * ;
import javax.swing.border. * ;
import java.lang.reflect. * ;
public class ButtonGroups extends JApplet ... {
static String[] ids = ...{ "June", "Ward", "Beaver", "Wally", "Eddie",
"Lumpy", };
//介绍一种新的产生按钮的方法,只需要传入你想创建的按钮的类的class形式
static JPanel makeBPanel(Class bClass, String[] ids) ...{
ButtonGroup bg = new ButtonGroup();
JPanel jp = new JPanel();
String title = bClass.getName();//结果是javax.swing.JButton(JButton.class)等等
title = title.substring(title.lastIndexOf('.') + 1);
jp.setBorder(new TitledBorder(title));
//产生按钮的新颖方法
for (int i = 0; i < ids.length; i++) ...{
AbstractButton ab = null;
try ...{
Constructor ctor = bClass.getConstructor(new Class[] ...{ String.class });//bClass为ctor的声明类
ab = (AbstractButton) ctor.newInstance(new Object[] ...{ ids[i] });//创建声明类的新实例
} catch (Exception ex) ...{
System.err.println("can't create " + bClass);
}
bg.add(ab);
jp.add(ab);
}
return jp;
}
public void init() ...{
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
cp.add(makeBPanel(JButton.class, ids));
cp.add(makeBPanel(JToggleButton.class, ids));
cp.add(makeBPanel(JCheckBox.class, ids));
cp.add(makeBPanel(JRadioButton.class, ids));
}
public static void main(String[] args) ...{
ButtonGroups applet = new ButtonGroups();
JFrame frame = new JFrame(applet.getClass().toString().substring(6));// 建立一个名字为Buttons的frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// frame关闭方法
frame.getContentPane().add(applet);
applet.init();
applet.start();
frame.setSize(600, 300);
frame.setVisible(true);
}
}
import java.awt. * ;
import javax.swing.border. * ;
import java.lang.reflect. * ;
public class ButtonGroups extends JApplet ... {
static String[] ids = ...{ "June", "Ward", "Beaver", "Wally", "Eddie",
"Lumpy", };
//介绍一种新的产生按钮的方法,只需要传入你想创建的按钮的类的class形式
static JPanel makeBPanel(Class bClass, String[] ids) ...{
ButtonGroup bg = new ButtonGroup();
JPanel jp = new JPanel();
String title = bClass.getName();//结果是javax.swing.JButton(JButton.class)等等
title = title.substring(title.lastIndexOf('.') + 1);
jp.setBorder(new TitledBorder(title));
//产生按钮的新颖方法
for (int i = 0; i < ids.length; i++) ...{
AbstractButton ab = null;
try ...{
Constructor ctor = bClass.getConstructor(new Class[] ...{ String.class });//bClass为ctor的声明类
ab = (AbstractButton) ctor.newInstance(new Object[] ...{ ids[i] });//创建声明类的新实例
} catch (Exception ex) ...{
System.err.println("can't create " + bClass);
}
bg.add(ab);
jp.add(ab);
}
return jp;
}
public void init() ...{
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
cp.add(makeBPanel(JButton.class, ids));
cp.add(makeBPanel(JToggleButton.class, ids));
cp.add(makeBPanel(JCheckBox.class, ids));
cp.add(makeBPanel(JRadioButton.class, ids));
}
public static void main(String[] args) ...{
ButtonGroups applet = new ButtonGroups();
JFrame frame = new JFrame(applet.getClass().toString().substring(6));// 建立一个名字为Buttons的frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// frame关闭方法
frame.getContentPane().add(applet);
applet.init();
applet.start();
frame.setSize(600, 300);
frame.setVisible(true);
}
}
一、作用:
将一组按钮加到同一个按钮群组(Button groups)当中,就可以实现,同一群组当中的按钮以互斥的方式运作。
二、例子难点解答:
cp.add(makeBPanel(JButton.class, ids));// 产生一个按钮,并将按钮加到JPanel上。下面介绍一下makeBPanel函数。
for循环内,是产生按钮的关键代码部分。
AbstractButton ab = null;//初始化一个按钮(所有的按钮都是AbstractButton 的子类)
Constructor ctor = bClass.getConstructor(new Class[] { String.class });//建立一个构造函数对象
ab = (AbstractButton) ctor.newInstance(new Object[] { ids[i] });//创建bClass的新实例
优点:可以将(AbstractButton )按钮的产生集中到一个函数体,缩小了代码量,适合大的应用程序。
缺点:增加了复杂度,适合于小的应用