JRadioButton是一个带标签的圆形选择框,有两个状态分别是选中状态和未选中状态,Java
API上将此类推荐为单选按钮,其原因大多是因为外形上的因素,其实质上与JCheckBox是相似的,都是继承自JToggleButton,并实现了Accessible接口。将一组JRadioButton用作单选钮的时候,一般将其添加到GroupButton的对象中,以保证一组类按钮的单选。也就是说,一般而言,JRadioButton和ButtonGroup是组合在一起使用的,下面分别介绍这两个类。
JRadioButton类
构造函数
//创建一个初始化为未选择的单选按钮,其文本未设定
JRadioButton();
//创建一个单选按钮,其属性来自提供的
Action
JRadioButton(Action a);
//创建一个初始化为未选择的单选按钮,其具有指定的图像但无文本
JRadioButton(Icon icon);
//创建一个具有指定图像和选择状态为selected指定的单选按钮,但无文本。
JRadioButton(Icon icon, boolean selected);
//创建一个具有指定文本的状态为未选择的单选按钮
JRadioButton(String text);
//创建一个具有指定文本和选择状态的单选按钮
JRadioButton(String text, boolean selected);
//创建一个具有指定的文本和图像并初始化为未选择的单选按钮
JRadioButton(String text, Icon icon);
//创建一个具有指定的文本、图像和选择状态为selected指定的单选按钮。
JRadioButton(String text, Icon icon, boolean selected);
JRadioButton需要注意的事件:
ItemEvent,因此需要添加ItemListener,需要实现ItemListener接口,该接口只有一个必须实现的函数
public void
itemStateChanged( ItemEvent event )
ButtonGroup类
该类只有一个空构造函数ButtonGroup()
类中重要的方法:
//将按钮添加到组中
void add(AbstractButton b);
//从组中移除按钮
void remove(AbstractButton b);
//清除选中内容,从而没有选择
ButtonGroup 中的任何按钮
void clearSelection();
//为
ButtonModel 设置选择值
void setSelected(ButtonModel m, boolean b);
//返回对是否已选择一个
ButtonModel 的判断
boolean isSelected(ButtonModel m);
下面给出一个例子,例子中是一道计算机的单选题目,点击选项会进行单选,点击提交,会显示是否选择正确,点击重做,会清除选择,并提示重新答题,给出示例代码并不是最简单的实现,仅仅是为了给出示例,才会如此书写:
public
class
RadioButtonFrame
extends
JFrame {
private
JTextField
result;//显示结果
private
JLabel
issue;//显示问题
//四个选项
private
JRadioButton
selectA,
selectB,
selectC,
selectD;
//放置题目和放置按钮的两个面板
private
JPanel
p1,
p2;
private
JButton
refresh,
submit;
//题目正确与否的标志
private
boolean
isRight;
//题目选项组
ButtonGroup
group;
public
RadioButtonFrame()
{
super(
"测试题1"
);
setLayout(
new
GridLayout( 2, 1 ) );
isRight
=
false;
p1
=
new
JPanel();
p2
=
new
JPanel();
add(
p1
);
add(
p2
);
p1.setLayout(
new
GridLayout( 6, 1 ) );
p2.setLayout(
new
GridLayout( 1, 2 ) );
issue
=
new
JLabel(
"下列关于文档窗口的说法中正确的是"
);
p1.add(
issue
);
selectA
=
new
JRadioButton(
"A.可以同时打开多个文档窗口,但在屏幕上只能见到一个文档的窗口",
false
);
selectB
=
new
JRadioButton(
"B.可以同时打开多个文档窗口,被打开的窗口都是活动窗口",
false
);
selectC
=
new
JRadioButton(
"C.可以同时打开多个文档窗口,但其中只有一个是活动窗口",
false
);
selectD
=
new
JRadioButton(
"D.只能打开一个文档窗口
",
false
);
p1.add(
selectA
);
p1.add(
selectB
);
p1.add(
selectC
);
p1.add(
selectD
);
//将四个选项添加进按钮组
//保证只有一个选项选中
group
=
new
ButtonGroup();
group.add(
selectA
);
group.add(
selectB
);
group.add(
selectC
);
group.add(
selectD
);
result
=
new
JTextField(
"请作答"
);
result.setEditable(
false
);
p1.add(
result
);
submit
=
new
JButton(
"提交"
);
refresh
=
new
JButton(
"重做"
);
p2.add(
submit
);
p2.add(
refresh
);
JRadioHandler rHandler =
new
JRadioHandler();
ActionHandler aHandler =
new
ActionHandler();
//添加ItemListener
selectA.addItemListener(
rHandler );
selectB.addItemListener(
rHandler );
selectC.addItemListener(
rHandler );
selectD.addItemListener(
rHandler );
submit.addActionListener(
aHandler );
refresh.addActionListener(
aHandler );
setVisible(
true
);
setSize( 500, 400 );
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE
);
}//end
RadioButtonFrame
private
class
JRadioHandler
implements
ItemListener
{
public
void
itemStateChanged( ItemEvent event )
{
//C为正确答案
if(
selectC.isSelected()
)
isRight
=
true;
else
isRight
=
false;
}
}//end
class JRadioHandler
private
class
ActionHandler
implements
ActionListener
{
public
void
actionPerformed( ActionEvent event )
{
if(
event.getSource() ==
submit
)
{
System.out.print(
"结果:
"
+
group.isSelected(
selectA.getModel()
) );
if(
isRight
)
result.setText(
"回答正确!"
);
else
result.setText(
"回答错误!"
);
}//end
if
else
if(
event.getSource() ==
refresh
)
{
//清除组中所有按钮的选择状态
group.clearSelection();
result.setText(
"请作答"
);
}
}//end
actionPerfromed
}//end
class ActionHandler
public
static
void
main( String[] args )
{
RadioButtonFrame test =
new
RadioButtonFrame();
}//end
main
}//end
RadioButtonFrame
代码运行的效果如图:
nbsp;
加载中,请稍候......