Swing-JRadioButton用法-入门
JRadioButton是Swing中的单选框。所谓单选框是指,在同一个组内虽然有多个单选框存在,然而同一时刻只能有一个单选框处于选中状态。它就像收音机的按钮,按下一个时此前被按下的会自动弹起,故因此得名。因此,在添加JRadioButton控件时,要记得将它们添加到同一个ButtonGroup中。
JRadioButton的常用方法如下图所示:

可以为它添加ActionListener对象来响应事件。这里有一个问题,当多个JRadioButton共用一个事件监听器时,如何获取产生事件的按钮?
有4种方法:
1.遍历这些按钮并检查是否选中这种方法比较笨重。
2.使用事件的getActionCommand()方法,这需要事先为每个控件设置ActionCommand。
3.使用事件的getSource,并转化为控件对象。
4.使用ButtonGroup的getSelection方法,它返回的并不是控件,而是那个控件的ButtonModel,需再次调用ButtonModel的getActionCommand方法。
使用demo如下:
JRadioButtonDemo.java
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
/*
* source code from 《java核心技术 卷1 基础知识》 P329
*/
public class JRadioButtonDemo extends JFrame {
int DEFAULT_WIDTH = 600;
int DEFAULT_HEIGHT = 400;
private JLabel label;
private JPanel buttonPanel;
private ButtonGroup group;
private static final int DEFAULT_SIZE = 12;
private Map<String, Integer> actionCommandSizeMap = new HashMap<String, Integer>();
// 二维数组存储按钮属性,第一维是按钮名称,第二维是字体大小
private String[][] buttonAttributes = {
{ "Small", "Medium", "Large", "Extra" }, { "8", "12", "18", "36" } };
public JRadioButtonDemo() {
setTitle("JRadioButtonDemo");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
// 添加label
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,它包含4个radioButton
buttonPanel = new JPanel();
group = new ButtonGroup();
add(buttonPanel, BorderLayout.SOUTH);
// 添加radioButton
for (int i = 0; i < buttonAttributes[0].length; i++) {
addRadioButton(buttonAttributes[0][i],
Integer.parseInt(buttonAttributes[1][i]));
// 将按钮名称和字体大小添加为对应表,名称等同于actionCommand
actionCommandSizeMap.put(buttonAttributes[0][i],
Integer.parseInt(buttonAttributes[1][i]));
}
}
public void addRadioButton(String name, final int size) {
boolean selected = size == DEFAULT_SIZE;
JRadioButton button = new JRadioButton(name, selected);
button.setActionCommand(name);// 设置name即为actionCommand
group.add(button);
buttonPanel.add(button);
// 构造一个监听器,响应checkBox事件
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 1.通过eActionCommand
String eActionCommand = e.getActionCommand();
System.out.printf("e.getActionCommand() is %s\n",
eActionCommand);
// 2.通过getSource()
Object sourceObject = e.getSource();
if (sourceObject instanceof JRadioButton) {
JRadioButton sourceButton = (JRadioButton) sourceObject;
System.out.printf("selected JRadioButton is %s\n",
sourceButton.getText());
}
// 3.通过groupSelectionActionCommand
String groupSelectionActionCommand = group.getSelection()
.getActionCommand();
System.out.printf("groupSelectionActionCommand is %s\n",
groupSelectionActionCommand);
label.setFont(new Font("Serif", Font.PLAIN,
actionCommandSizeMap.get(groupSelectionActionCommand)));
}
};
button.addActionListener(actionListener);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// 创建窗体并指定标题
JRadioButtonDemo frame = new JRadioButtonDemo();
// 关闭窗体后退出程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 自动适配所有控件大小
// frame.pack();
// 设置窗体位置在屏幕中央
frame.setLocationRelativeTo(null);
// 显示窗体
frame.setVisible(true);
}
}
运行效果如下:

Swing-JRadioButton用法-入门的更多相关文章
- Swing-JOptionPane对话框用法-入门
对话框是GUI程序中常见的界面,通常用来反馈提示信息.告警或获取用户输入.比如这种: JOptionPane是Swing中的一个对话框类,它能够提供常见的绝大多数对话框效果,本文对这个类进行介绍.需要 ...
- 精通awk系列(4):awk用法入门
回到: Linux系列文章 Shell系列文章 Awk系列文章 awk用法入门 awk 'awk_program' a.txt awk示例: # 输出a.txt中的每一行 awk '{print $0 ...
- [转帖]PG语法解剖--基本sql语句用法入门
PG语法解剖--基本sql语句用法入门 https://www.toutiao.com/i6710897833953722894/ COPY 命令挺好的 需要学习一下. 原创 波波说运维 2019-0 ...
- Go之Logrus用法入门
Go之Logrus用法入门 Logrus是Go (golang)的结构化日志程序,完全兼容标准库的API日志程序. Logrus is a structured logger for Go (gola ...
- AWK用法入门详解
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- Swing-JComboBox用法-入门
JComboBox是Swing中的下拉菜单控件.它永远只能选中一个项目,然而比单选按钮节省空间.如果使用setEditable设置为true则内部选项的文本可以编辑,因此这种组件被称为组合框.注意,对 ...
- Swing-setBorder()用法-入门
注:本文内容转自:Swing编程边框(Border)的用法总结.内容根据笔者理解稍有整理. 函数说明: public void setBorder(Border border) 设置此组件的边框.Bo ...
- Java-Preferences用法-入门
Properties提供的应用程序解决方案主要存在两个问题: (1)配置文件不能放在主目录中,因为某些OS(如Win9X)没有主目录的概念: (2)没有标准的文件命名规则,存在文件名冲突的可能性. J ...
- Java-Properties用法-入门
对于应用程序的配置,通常的做法是将其保存在独立的配置文件中,程序启动时加载,修改时保存.Java中Properties类就提供了这样一种机制,配置项以Key-Value的数据结构存储在文本文件中,扩展 ...
随机推荐
- CTF比赛中SQL注入的一些经验总结
ctf中sql注入下的一些小技巧 最近花了一点时间总结了各大平台中注入的trick,自己还是太菜了,多半都得看题解,就特此做了一个paper方便总结 注释符 以下是Mysql中可以用到的单行注释符: ...
- mysql存储过程详细讲解及完整实例下载
一.存储过程概念 1.存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集.经编译后存储在数据库 中. 2.存储过程是数据库中的一个重要对象,用户通过指定存储过程的名字并给 ...
- 从用eclipse还是idea所想到的
最近一直在用idea做开发,刚开始用起来还是不熟,毕竟上次用idea还是研三在某知名互联网实习的时候,在学校和上家公司都用的是eclipse,然后就想,为什么有的公司用eclipse,有的公司用ide ...
- CSS属性定义 文本修饰 边框效果 背景修饰
一.CSS属性定义1.css颜色表示方法[重点]rgb(红绿蓝3个颜色通道 强度值为0-255)rgb(0,0,0)rgba(alpha a是透明度 值为0-1)rgba(123,123,123,0) ...
- windows 注入 之 CreateRemoteThread
钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之前处理它.钩子机 ...
- Java编程入门(词汇表)
抽象类(abstract class):抽象类不能创建对象,主要用来创建子类.Java中的抽象类使用 abstract 修饰符定义. 抽象数据类型(abstract data type ADT):抽象 ...
- 如何在GitHub上生成ssh公钥并用NetBeans克隆项目
一.生成ssh公钥. 1.首先判断本机是否创建了公有密钥: $ ls ~/.ssh 这个命令用于检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在,下面步骤可省略 ...
- fineui webform
基于 jQuery 的专业 ASP.NET WebForms/MVC 控件库
- hdu 6171---Admiral(双向搜索)
题目链接 Problem Description Suppose that you are an admiral of a famous naval troop. Our naval forces h ...
- Http2改造实践:statusText丢失问题
背景: 1.项目中的nginx由http1.1改造为http2, 2.代码中采用axios的interceptors做统一返回处理,对于系统逻辑性错误弹窗(例如:表单字段唯一性校验弹窗提示) 现象: ...