Java GUI编程11---单选按钮:JRadioButton

认识JRadioButton

单选按钮就是在给定的多个选择项中选择一个,并且只能选择一个。在Swing中可以使用JRadioButton完成一组单选按钮的操作,JRadioButton的常用方法如下表。

序号方法描述
1public JRadioButton(Icon icon)创建一个单选按钮,并设定图片
2public JRadioButton(Icon icon, boolean selected)创建一个单选按钮,设定图片,并设定是否选中
3public JRadioButton(String text)创建一个单选按钮,制定按钮文本,默认不选中
4public JRadioButton(String text, boolean selected)创建一个具有指定文本和选择状态的单选按钮。
5public JRadioButton(String text, Icon icon, boolean selected)创建一个具有指定的文本、图像和选择状态的单选按钮。
6public void setSelected(boolean b)设置按钮是否被选中,从类 javax.swing.AbstractButton 继承
7public boolean isSelected()返回该按钮是否被选中,如果选定了按钮,则返回 true,否则返回 false。从类 javax.swing.AbstractButton 继承
8public void setText(String text)设置按钮的显示文本。从类 javax.swing.AbstractButton 继承
9public 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接口进行事件的监听。此接口定义了如下表所示的方法。

序号方法描述
1void itemStateChanged(ItemEvent e)在用户已选定或取消选定某项时调用。

此方法中存在ItemEvent事件,此事件的常用方法及常量如下表所示。

序号常量描述
1public static int SELECTED选项被选中
2public static int DESELECTED选项取消选中
序号描述
1public Object getItem()返回受事件影响的选项。
2public 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事件,之后修改每个选项显示图片。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值