大家好,又见面了,我是你们的朋友全栈君。
认识JRadioButton
单选按钮就是在给定的多个选择项中选择一个,并且只能选择一个。在Swing
中可以使用JRadioButton
完成一组单选按钮的操作,JRadioButton
的常用方法如下表。
序号 | 方法 | 描述 |
---|---|---|
1 | public JRadioButton(Icon icon) |
创建一个单选按钮,并设定图片 |
2 | public JRadioButton(Icon icon, boolean selected) |
创建一个单选按钮,设定图片,并设定是否选中 |
3 | public JRadioButton(String text) |
创建一个单选按钮,制定按钮文本,默认不选中 |
4 | public JRadioButton(String text, boolean selected) |
创建一个具有指定文本和选择状态的单选按钮。 |
5 | public JRadioButton(String text, Icon icon, boolean selected) |
创建一个具有指定的文本、图像和选择状态的单选按钮。 |
6 | public void setSelected(boolean b) |
设置按钮是否被选中,从类 javax.swing.AbstractButton 继承 |
7 | public boolean isSelected() |
返回该按钮是否被选中,如果选定了按钮,则返回 true ,否则返回 false 。从类 javax.swing.AbstractButton 继承 |
8 | public void setText(String text) |
设置按钮的显示文本。从类 javax.swing.AbstractButton 继承 |
9 | public void setIcon(Icon defaultIcon) |
设置按钮的默认图标。 |
实例:显示单选按钮
package java1.swing.buttons;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.BorderFactory;
//完成单选的实现
class MyRadio
{
//设置一窗体
private JFrame frame = new JFrame("单选按钮");
//获取窗体容器
private Container cont = frame.getContentPane();
//定义三个窗体按钮
private JRadioButton jradio1 = new JRadioButton("男");
private JRadioButton jradio2 = new JRadioButton("女");
//定义一个面板
private JPanel pan = new JPanel();
public MyRadio()
{
//设置边框显示条
pan.setBorder(BorderFactory.createTitledBorder("性别:"));
//定义排版样式
pan.setLayout(new GridLayout(3, 1));
pan.add(this.jradio1);
pan.add(this.jradio2);
cont.add(pan);
this.frame.setSize(400, 200);
this.frame.setVisible(true);
//监听窗体关闭事件
this.frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent obj)
{
System.exit(1);
}
});
}
}
public class JRadioButtonDemo01
{
public static void main(String args[])
{
new MyRadio();
}
}
运行效果:
上面的程序中正确的显示了一个面板,而且因为在设置面板的时候使用了setBorder()
方法,所以在面板上定义了一个标题的边框。
问题:
上面的程序中只是在按钮样式像单选按钮,单并不能实现单选的功能,我们可以同时选中上面的所有按钮。运行结果如下。
从运行结果来看,此时已经形成多选
的功能了。之所以会出现这样的问题,主要是由于并没有将所有的单选按钮加入到一个组件中。使用ButtonGroup就可以实现将所有的单选按钮加入到一个组件中,使用方式如下:
//定义按钮组
ButtonGroup group=new ButtonGroup();
group.add(jradio1);
group.add(jradio2);
此时运行就不会出现多选
的情况了。现在只能选中一个按钮,如果选中下一个按钮,上一个选中的按钮就会变成未选中。
完整代码如下:
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
//完成单选的实现
class MyRadio
{
//设置一窗体
private JFrame frame = new JFrame("单选按钮");
//获取窗体容器
private Container cont = frame.getContentPane();
//定义三个窗体按钮
private JRadioButton jradio1 = new JRadioButton("男");
private JRadioButton jradio2 = new JRadioButton("女");
//定义一个面板
private JPanel pan = new JPanel();
public MyRadio()
{
//设置边框显示条
pan.setBorder(BorderFactory.createTitledBorder("性别:"));
//定义排版样式
pan.setLayout(new GridLayout(3, 1));
//定义按钮组
ButtonGroup group=new ButtonGroup();
//把单选按钮添加到按钮组中,这样只能选组中的一个按钮,真正实现单选
group.add(jradio1);
group.add(jradio2);
pan.add(this.jradio1);
pan.add(this.jradio2);
cont.add(pan);
this.frame.setSize(400, 200);
this.frame.setVisible(true);
//监听窗体关闭事件
this.frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent obj)
{
System.exit(1);
}
});
}
}
public class JRadioButtonDemo01
{
public static void main(String args[])
{
new MyRadio();
}
}
JRadioButton事件处理
在单选按钮操作中,可以使用ItemListener
接口进行事件的监听。此接口定义了如下表所示的方法。
序号 | 方法 | 描述 |
---|---|---|
1 | void itemStateChanged(ItemEvent e) |
在用户已选定或取消选定某项时调用。 |
此方法中存在ItemEvent
事件,此事件的常用方法及常量如下表所示。
序号 | 常量 | 描述 |
---|---|---|
1 | public static int SELECTED |
选项被选中 |
2 | public static int DESELECTED |
选项取消选中 |
序号 | 描述 | |
---|---|---|
1 | public Object getItem() | 返回受事件影响的选项。 |
2 | public int getStateChange() | 返回状态更改的类型(已选定或已取消选定 |
实例:单选按钮事件操作—性别选择
package java1.swing.buttons;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
class MyRadio1 implements ItemListener
{
//图标路径
private String male ="D:\\dev\\java\\my\\icon\\my\\图标男压缩.jpg";
private String female = "D:\\dev\\java\\my\\icon\\my\\图标女压缩.jpg";
private JFrame frame = new JFrame("单选按钮事件");
private Container cont = frame.getContentPane();
private JRadioButton jradionmale = new JRadioButton("男");
private JRadioButton jradiofemale = new JRadioButton("女");
private JPanel pan = new JPanel();
public MyRadio1()
{
//设置显示条
pan.setBorder(BorderFactory.createTitledBorder("选择性别"));
//设置排版
pan.setLayout(new GridLayout(1, 3));
//面板中加入两个单选按钮
pan.add(this.jradionmale);
pan.add(this.jradiofemale);
//设置按钮组
ButtonGroup group = new ButtonGroup();
group.add(this.jradionmale);
group.add(this.jradiofemale);
//单选按钮设置监听器
jradionmale.addItemListener(this);
jradiofemale.addItemListener(this);
//面板加入到框架的容器中
cont.add(pan);
this.frame.setSize(400, 200);
this.frame.setVisible(true);
//监听窗体关闭事件
this.frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent obj)
{
System.exit(1);
}
});
}
public void itemStateChanged(ItemEvent e)
{
if (e.getSource() == jradionmale)
{
jradionmale.setIcon(new ImageIcon(male));
jradiofemale.setIcon(null);
} else
{
jradiofemale.setIcon(new ImageIcon(female));
jradionmale.setIcon(null);
}
}
}
public class JRadioButtonDemo03
{
public static void main(String args[])
{
new MyRadio1();
}
}
图标男:
图标女:
运行结果:
选择男,运行效果:
选择女,运行效果:
在上面的程序中,使用ImageIcon
设置凉了单选按钮的图片,每次选项改变后都会触发itemStateChanged
事件,之后修改每个选项显示图片。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139173.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...