java核心技术卷 之单选按钮

        在前一个例子中,对于两个复选框,用户既可以选择一个、两个,也可以两个都不选。在很多情况下,我们需要用户只选择几个选项当中的 一个。与用户选择另一项的时候,前一项就自动地取消选择。这样一组选框通常称为单选按钮组(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)

设置按钮及其模型的动作命令

猜你喜欢

转载自blog.csdn.net/u014572215/article/details/78048740
今日推荐