转自:http://www.isstudy.com/java/2005.html
JComboBox(选择框)组件
JComboBox组件实现一个选择框,用户可以从下拉列表中选择相应的值,该选择框还可以设置为可编辑,当设置为可编辑状态时,用户可以在选择框中输入相应的值。JComboBox类提供的常用构造方法如表1所示。![](http://www.isstudy.com/d/file/uploads/allimg/090922/1_090922092058_1.gif)
表1 JComboBox类的常用构造方法
在创建选择框时,可以通过构造函数直接指定该选择框包含的选项,例如下面的代码,将创建一个包含选项“男”和“女”的选择框:
String[] sexs = { "男", "女" };
JComboBox sexComboBox = new JComboBox(sexs);
也可以通过方法addItem()或insertItemAt()向选择框中添加选项,以及通过方法setSelected Item()或setSelectedIndex()设置选择框的默认选项,还可以通过方法setEditable()将选择框设置为可编辑的,即选择框可以接受用户输入的信息。JComboBox类提供的常用构造方法如表2所示。
![](http://www.isstudy.com/d/file/uploads/allimg/090922/1_090922092109_1.gif)
表2 JComboBox类的常用方法
可以通过ActionListener侦听器或ItemListener侦听器捕获选择框被修改的事件,它们的区别是ActionListener侦听器只能捕获到一次ActionEvent事件,不过当选择框的选项为“硕士”时,如果重新选中选项列表中的“硕士”选项,ActionListener侦听器依然会捕获到一次ActionEvent事件,而ItemListener侦听器只捕获选择框真正被修改的ItemEvent事件。但是ItemListener侦听器将捕获到两次ItemEvent事件,第一次为被修改的选项触发的,第二次是新选中的选项触发的。
在利用ItemListener侦听器捕获选择框被修改的事件时,可以通过ItemEvent事件的对象,获得触发此次事件的相关信息,例如通过getItem()方法获得选项内容;通过getStateChange()方法获得选项状态,如果是由被修改的选项触发的,则返回2,此时与静态常量DESELECTED的值相等;如果是由新选中的选项触发的,则返回1,此时与静态常量SELECTED的值相等。假设为上面创建的性别选择框添加一个下面代码所示的侦听器:
sexComboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
System.out.print("Item=" + e.getItem());
System.out.println(" StateChange=" + e.getStateChange());
}
});
当将选择框的选项从“男”修改为“女”时,在控制台将输出如下信息:
Item=男 StateChange=2
Item=女 StateChange=1
下面将通过一个例子,讲解JComboBox组件的使用方法。
首先创建一个用来填写学历的选择框,选择框包含的学历选项在创建选择框时通过一个数组初始化;然后又分别为选择框添加了一个“其他”选项和“请选择”选项,其中“其他”选项添加到选项列表的尾部,“请选择”选项添加到索引值为0的位置,即选项列表的最前端,并设置“请选择”选项为默认选项,如果不设置“请选择”选项为默认选项,在这里“本科”选项将是默认选项,代码如下:
StudySwingsrccommwqIndex.java关键代码:
String[] schoolage = { "本科", "硕士", "博士" };
schoolageComboBox = new JComboBox(schoolage);
schoolageComboBox.addItem("其他");
schoolageComboBox.insertItemAt("请选择", 0);
schoolageComboBox.setSelectedIndex(0);
下面利用ItemListener侦听器编写捕获学历选择框被修改的事件,当修改为“其他”选项时,将选择框设置为可编辑,并将选项的内容设置为空,否则为不可编辑,代码如下:
StudySwingsrccommwqIndex.java关键代码:
schoolageComboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) { // 查看是否为新选中的选项触发
if (e.getItem().equals("其他") || e.getItem().equals("")) { // 查看触发的选项
schoolageComboBox.setEditable(true); // 设置选择框为可编辑
schoolageComboBox.setSelectedItem(""); // 将选项值修改为0字节
} else {
schoolageComboBox.setEditable(false); // 设置选择框为不可编辑
}
}
}
});
注意:
当将选项的内容设置为空时,也会触发ItemEvent事件,所以在查看触发的选项时加入了代码“e.getItem().equals("")”。
运行该例子,当选中选项“硕士”时的效果如图1所示,当选中选项“其他”时,选择框的内容将变为空白,图2中的“大专”为用户输入的内容。
图1 选定选择框
图2 编辑选择框
完整代码:
StudySwingsrccommwqIndex.java完整代码:
package com.mwq;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Index {
private JLabel schoolageLabel;
private JComboBox schoolageComboBox;
public void add(JFrame frame) {
frame.setTitle("选择框的使用方法");
frame.setLayout(null);
schoolageLabel = new JLabel("学历:");
schoolageLabel.setBounds(135, 120, 40, 20);
String[] schoolage = { "本科", "硕士", "博士" };
schoolageComboBox = new JComboBox(schoolage);
schoolageComboBox.setBounds(185, 120, 80, 20);
schoolageComboBox.addItem("其他");
schoolageComboBox.insertItemAt("请选择", 0);
schoolageComboBox.setSelectedIndex(0);
schoolageComboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {// 查看是否为新选中的选项触发的
if (e.getItem().equals("其他") || e.getItem().equals("")) {// 查看触发的选项
schoolageComboBox.setEditable(true);// 设置选择框为可编辑的
schoolageComboBox.setSelectedItem("");// 将选项值修改为0字节
} else {
schoolageComboBox.setEditable(false);// 设置选择框为不可编辑的
}
}
}
});
frame.add(schoolageLabel);
frame.add(schoolageComboBox);
}
public static void main(String[] args) {
JFrame frame = new JFrame("利用JFrame创建窗口");// 创建指定标题的JFrame窗口对象
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 关闭按钮的动作为退出窗口
frame.setSize(400, 300);// 设置窗口大小
Dimension displaySize = Toolkit.getDefaultToolkit().getScreenSize();// 获得显示器大小对象
Dimension frameSize = frame.getSize();// 获得窗口大小对象
if (frameSize.width > displaySize.width)
frameSize.width = displaySize.width;// 窗口的宽度不能大于显示器的宽度
if (frameSize.height > displaySize.height)
frameSize.height = displaySize.height;// 窗口的高度不能大于显示器的高度
frame.setLocation((displaySize.width - frameSize.width) / 2,
(displaySize.height - frameSize.height) / 2);// 设置窗口居中显示器显示
Index index = new Index();
index.add(frame);// 向JFrame窗口添加标签
frame.setVisible(true);// 设置窗口为可见的,默认为不可见
}
}