Java Swing组件:按钮
本文介绍了Java Swing组件:按钮的使用方法。按钮组件可分为四种:普通按钮(JButton)、切换按钮(JToggleButton)、复选按钮(JCheckBox)和单选按钮(JRadioButton)。
按钮是图形用户界面中最常见的组件之一。按钮组件可分为四种:普通按钮(JButton)、切换按钮(JToggleButton)、复选按钮(JCheckBox)和单选按钮(JRadioButton),其中,Jbutton和JToggleButton是抽象类AbstractButton的子类,JCheckBox和JRadioButton是JToggleButton的子类。AbstractButton中定义了各种按钮都共有的一些方法,例如,设置文本、设置图标、注册事件监听器等。(Java Swing组件)
1. 普通按钮
普通按钮(JButton)是使用最为广泛的一种按钮。Jbutton类的构造方法如下:
- JButton():创建一个无文本和图标的空普通按钮。
- JButton(String text):创建一个带文本的普通按钮。
- JButton(Icon icon):创建一个带图标的普通按钮。
- JButton(String text, Icon icon):创建一个带文本和图标的普通按钮。
2. 切换按钮
切换按钮(JToggleButton)具有两种状态:选中状态和未选中状态。通过isSelected()方法可以获知切换按钮的当前状态,当返回值为true表示处于选中状态,而返回值为false则表示处于未选中状态。默认情况下,切换按钮为未选中状态,JToggleButton类的构造方法如下:
- JToggleButton():创建一个无文本和图标的空切换按钮。
- JToggleButton(String text):创建一个带文本的切换按钮。
- JToggleButton(String text, boolean selected):创建一个带文本和指定初始状态的切换按钮。
- JToggleButton(Icon icon):创建一个带图标的切换按钮。
- JToggleButton(Icon icon, boolean selected):创建一个带图标和指定初始状态的切换按钮。
- JToggleButton(String text, Icon icon, boolean selected):创建一个带文本和图标以及指定始状态的切换按钮。
3. 复选和单选按钮
复选按钮(JCheckBox)和单选按钮(JRadioButton)是切换按钮的子类, JCheckBox和JradioButton构造方法的格式与JToggleButton相同。JCheckBox和JRadioButton可以通过按钮组(ButtonGroup)进行分组,JCheckBox加入按钮组后只能单选,JRadioButton没有加入按钮组可以多选。
例如,下面代码将三个单选按钮rb1、rb2和rb3放到按钮组group中,这时,只能选择三个单选按钮之一,如果它们没有放到一个按钮组中,则这三个单选按钮也能够复选。
ButtonGroup group=new ButtonGroup(); JRadioButton rb1=new JRadioButton("rb1"); JRadioButton rb2=new JRadioButton("rb2"); JRadioButton rb3=new JRadioButton("rb3"); group.add(rb1);group.add(rb2);group.add(rb3);//将三个单选按钮放到按钮组中 |
类似地,如果将一组复选按钮放到一个按钮组中,那么只能选择这些复选按钮之一。
【例1】复选按钮和单选按钮的使用。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JToggleButtonDemo extends JFrame{
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
JTextArea textArea=new JTextArea();
JLabel label1=new JLabel("编程语言:");
JLabel label2=new JLabel("专业:");
JCheckBox cb[]= {new JCheckBox("C"), new JCheckBox("C++"),
new JCheckBox("Java"), new JCheckBox("Python")};
JRadioButton rb[]= {new JRadioButton("计算机科学与技术"),
new JRadioButton("软件工程"),
new JRadioButton("人工智能")};
JRadioButton rb1=new JRadioButton("计算机科学与技术");
JRadioButton rb2=new JRadioButton("软件工程");
JRadioButton rb3=new JRadioButton("人工智能");
boolean language[]=new boolean[cb.length];
String major="";
public JToggleButtonDemo() {
this.setTitle("复选与单选按钮示例");
this.setSize(400, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane=this.getContentPane();
contentPane.setLayout(new GridLayout(3,1,1,1));//网格布局
//将标签label1和所有复选按钮放到面板panel1中
panel1.setLayout(new FlowLayout(FlowLayout.LEFT));
panel1.add(label1);
for(int i=0;i<cb.length;i++) {
panel1.add(cb[i]);//将复选按钮放到panel1上
cb[i].addItemListener(il);//注册选项事件监听器
}
//将标签label2和所有单选按钮放到面板panel2中
panel2.setLayout(new FlowLayout(FlowLayout.LEFT));
panel2.add(label2);
ButtonGroup group=new ButtonGroup();//单选按钮分组
for(int i=0;i<rb.length;i++) group.add(rb[i]);
for(int i=0;i<rb.length;i++) {
panel2.add(rb[i]);//将单选按钮放到panel2上
rb[i].addItemListener(il);//注册选项事件监听器
}
contentPane.add(panel1);
contentPane.add(panel2);
contentPane.add(new JScrollPane(textArea));
this.setVisible(true);
}
//选项事件监听器(匿名类)
ItemListener il=new ItemListener() {
//选项事件处理方法
public void itemStateChanged(ItemEvent e) {
//获取事件源并转换为切换按钮对象
JToggleButton jtb=(JToggleButton)e.getSource();
textArea.setText("");//设置文本区为空
//保存复选按钮的状态
if(jtb instanceof JCheckBox) {
for(int i=0;i<cb.length;i++) {
if(jtb==cb[i])
language[i]=jtb.isSelected();
}
}
//将所有被选中的复选按钮的文信息本插入到文本区中
for(int i=0;i<cb.length;i++) {
if(language[i]) {
textArea.append(cb[i].getText()+"\n");
}
}
//获取被选中的单选按钮文本信息
if(jtb instanceof JRadioButton && jtb.isSelected()) {
major=jtb.getText();
}
//将被选中的单选按钮插入到文本域中
if(!major.equals("")) {
textArea.append(major);
}
}
};
public static void main(String[] args) {
JToggleButtonDemo frame=new JToggleButtonDemo();
}
}
运行上述程序,显示结果如图1(a)所示。加入我们选择编程语言中的Java和Python复选按钮,以及选择专业中的软件工程单选按钮,则在窗口下面的文本域中显示被选中按钮的文本信息,如图1(b)所示。
(a) | (b) |
图1. 复选按钮与单选按钮使用示例
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)