在前一个例子中,对于两个复选框,用户既可以选择一个、两个,也可以两个都不选。在很多情况下,我们需要用户只选择几个选项当中的 一个。与用户选择另一项的时候,前一项就自动地取消选择。这样一组选框通常称为单选按钮组(Radio Button Group),这是因为这些按钮的工作很像收音机 上的电台选择按钮。当按下一个按钮时,前一个按下的按钮就会自动弹起。
在Swing中,实现单选按钮组非常简中.。为单选按钮组构造一个ButtonGroup的对象。 然后,再将JRadioButton类型的对象添加到按钮组中按钮组负责在新按钮被按下时,取消前一个被按下的按钮的选择状态。
ButtonCroup group = new ButtonGroup();
JRadioButton smallButton = new JRadioButton("SmallM", false);
group.add(smallButton);
JRadioButton mediumButton = new JRadioButton("Medium",true);
group.add(nediumButton);
构造器的第二个参数为true表明这个按钮初始状态是被选择,其他按钮构造器的这个参数为false。注意,按钮组仅仅控制按钮的行为,如果想把这些按钮组织在一起布局,需要把它们添加到容器中,如JPanel。
单选按钮的事件通知机制与其他按钮一样用户点击一个单选按钮时,这个按钮将产生一个动作事件。在示例中,定义了一个动作监听器用来把字体大小设置为特定值:
ActionListener listener = new ActionListenerQ {
public void actionPerfomied(ActionEvent event)
{
// size refers to the final parameter of the addRadioButton method
label.setFont(new FontrSerif', Font.PLAIN, size));
}
};
用这个监听器与复选框屮的监听器做一个对比。每个单选按钮都对应一个不同的监听器对象。每个监听器都非常清楚所要做的事情——把字体尺寸设置为一个特定值。在复选框示例中,使用的是一种不同的方法,两个复选框共享一个动作监听器。这个监听器调用一个方法来检査两个复选框的当前状态。
示例程序:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Created by IBM on 2017/9/21.
*/
public class RadioButtonFrame extends JFrame{
private JPanel buttonPanel;
private ButtonGroup group;
private JLabel label;
private static final int DEFAULT_SIZE=36;
public static void main(String[]args){
RadioButtonFrame buttonFrame=new RadioButtonFrame();
buttonFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
buttonFrame.setVisible(true);
}
public RadioButtonFrame(){
label=new JLabel("The quick brown fox jumps over the lazy dog.");
label.setFont(new Font("Serif", Font.PLAIN,DEFAULT_SIZE));
add(label,BorderLayout.CENTER);
buttonPanel=new JPanel();
group=new ButtonGroup();
addRadioButton("Small",8);
addRadioButton("Medium",12);
addRadioButton("Large",18);
addRadioButton("Extra large",36);
add(buttonPanel,BorderLayout.SOUTH);
pack();
}
public void addRadioButton(String name,final int size){
boolean selected=size==DEFAULT_SIZE;
JRadioButton button=new JRadioButton(name,selected);
group.add(button);
buttonPanel.add(button);
ActionListener listener=new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setFont(new Font("Serif",Font.PLAIN,size));
}
};
button.addActionListener(listener);
}
}
运行结果:
• JRadioButton(String label, Icon icon)
构造一个单选按钮,初始没有被选择。
• JRadioButton(String label, boolean state)
用给定的标签和初始状态构造一个单选按扭
• void add( Abstract Butt on b)
将按钮添加到组中。
• ButtonModel getSelecti on()
返间被选择的按扭的按钮模型。
• Stri ng getActi onCommand()
回按钮模型的动作命令。
“ voi d setActi onCommand(Stri ng s)
设置按钮及其模型的动作命令