首页 > 编程知识 正文

按钮组Button group,单选按钮组

时间:2023-05-05 14:25:14 阅读:216283 作者:1781

要想让单选按钮表现出某种“排它”行为,你必须把它们加入到一个“按钮组”
(ButtonGroup)中。不过,正如下面的例子所演示的,任何AbstractButton对象都可以
加入到按钮组中。


为了避免重复编写大量的代码,下面这个例子使用了反射功能来产生几组不同类型的按钮。
注意 makeBPanel( )方法,它用来创建一个按钮组和一个 JPanel,此方法的第二个参数
是一个字符串数组。针对其中每个字符串,将创建一个由第一参数所代表的按钮实例,然
后将此按钮加入到 Jpanel 中:


//: c14:ButtonGroups.java
// Uses reflection to create groups
// of different types of AbstractButton.
// <applet code=ButtonGroups width=500 height=300></applet>
import javax.swing.*;
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.border.*; 
import java.lang.reflect.*; 
import com.bruceeckel.swing.*; 


public class ButtonGroups extends JApplet { 
private static String[] ids = {
"June", "Ward", "Beaver",
"Wally", "Eddie", "Lumpy",
  };
static JPanel makeBPanel(Class klass, String[] ids) {
    ButtonGroup bg = new ButtonGroup();
    JPanel jp = new JPanel(); 
    String title = klass.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 = 
          klass.getConstructor(new Class[]{String.class});
// Create a new object:
        ab = (AbstractButton) 
          ctor.newInstance(new Object[] { ids[i] }); 
      } catch(Exception ex) { 
        System.err.println("can't create " + klass); 
      }
      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) { 
    Console.run(new ButtonGroups(), 500, 300); 
  }
} ///:~


边框的标题是从类的名称中得到的,并且去掉了其中的路径信息。AbstractButton被初始
化为一个标签为“Failed”的JButton对象,所以即使你忽略了异常,仍旧能够在屏幕上观
察到失败。getConstructor( )方法产生一个Constructor对象,这个构造器对象接受“传
递给getConstructor( )的Class数组里面指定的类型”所组成的数组作为参数。然后你要
做的就是调用newInstance( ),并且把包含真正参数的Object数组传递给它,在本例中就
是ids数组中的每个字符串。


这就使这个简单的过程变得稍显复杂了。要想通过按钮得到“排它”行为,就得先创建一
个按钮组,然后把你希望具有“排它”行为的按钮加入到这个按钮组中。运行程序,你将
发现除了JButton以外,其它按钮都具有了这种“排它”行为。


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。