按钮组(Button group)

本文介绍如何通过按钮组(ButtonGroup)实现单选按钮的排它性选择,并展示了一个使用反射创建不同类型按钮组的示例程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要想让单选按钮表现出某种“排它”行为,你必须把它们加入到一个“按钮组”
(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以外,其它按钮都具有了这种“排它”行为。


### Element UI 中带有日月图标的按钮组使用方法 在Element UI中创建带有日月图标的按钮组可以通过`el-button-group`组件来实现。通过组合`el-button`并利用内置的图标库,可以轻松构建具有不同功能的日间模式和夜间模式切换按钮。 对于想要添加特定样式的按钮,比如包含日月图标的按钮,可以在`el-button`标签内嵌入`i`标签用于指定图标名称。Element UI支持多种方式引入图标,其中一种常见的方式是从官方提供的图标集中选取合适的图标名作为类名前缀加上`el-icon-`[^1]。 下面是一个具体的例子展示如何创建一组带日月图标的按钮: ```html <template> <div class="block"> <!-- 创建按钮组 --> <el-button-group> <!-- 日间模式按钮 --> <el-button type="primary" @click="toggleMode('day')"> <i class="el-icon-sunny"></i> Day Mode </el-button> <!-- 夜间模式按钮 --> <el-button type="primary" @click="toggleMode('night')"> <i class="el-icon-moon-night"></i> Night Mode </el-button> </el-button-group> </div> </template> <script> export default { methods: { toggleMode(mode) { console.log(`Switched to ${mode} mode`); // 实现模式切换逻辑... } } } </script> ``` 此代码片段展示了两个按钮被包裹在一个`el-button-group`容器里,分别代表了白天和夜晚两种不同的显示状态。点击这些按钮会触发相应的事件处理函数,在这里只是简单打印出了当前所选的状态到控制台[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值