列表组件
Swing 中提供两种列表组件,分别为下拉列表框(JComboBox)与列表框(JList)。下拉列表框与列表框都是带有一系列列表项的组件,用户可以从中选择需要的列表项。列表框较下拉列表框更直观,它将所有的列表项罗列在列表框中。但是,下拉列表框较列表框更为便捷、美观,它将所有的列表项隐藏起来,当用户选用其中的列表项时才会显现出来。本节将详细讲解列表框与下拉列表框的使用。
JComboBox下拉列表框
初次使用 Swing 中的下拉列表框时,会感觉到 Swing 中的下拉列表框与 Windows 操作系统中的下拉列表框有一些相似,实质上二者并不完全相同,因为 Swing 中的下拉列表框不仅可以供用户从中选择列表项,也提供编辑列表项的功能。
下拉列表框是一个条状的显示区,它具有下拉功能,在下拉列表框的右侧存在一个倒三角形的按钮,当用户单击该按钮时,下拉列表框中的项目将会以列表的形式显示出来。
下拉列表框组件由 JComboBox 对象表示,JComboBox 类是 javax.swing.JComponent 类的子类。JComboBox 类的常用构造方法如下。
-
public JComboBox(ComboBoxModel dataModel):创建一个 JComboBox 对象,下拉列表中的列表项使用 ComboBoxModel 中的列表项,ComboBoxModel 是一个用于组合框的数据模型。
-
public JComboBox(Object[] arrayData):创建一个包含指定数组中的元素的JComboBox对象。
-
public JComboBox(Vector vector):创建一个包含指定 Vector 对象中的元素的 JComboBox 对象。Vector 对象中的元素可以通过整数索引进行访问,而且 Vector 对象中的元素可以根据需求被添加或者移除。
JComboBox 类的常用方法及其说明如表18.7所示。

【例18.18】在下拉列表框中显示用户的所选内容(实例位置:资源包\TM\sl\18\18)
创建 JComboBoxTest 类,并继承 JFrame 类,窗体中有一个包含多个列表项的下拉列表框,当单击 “确定” 按钮时,把被选中的列表项显示在标签上。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class JComboBoxTest extends JFrame {
public JComboBoxTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("下拉列表框的使用");
setBounds(100, 100, 317, 147);
getContentPane().setLayout(null); // 设置绝对布局
JLabel lblNewLabel = new JLabel("请选择证件:");
lblNewLabel.setBounds(28, 14, 80, 15);
getContentPane().add(lblNewLabel);
JComboBox<String> comboBox = new JComboBox<String>(); // 创建一个下拉列表框
comboBox.setBounds(110, 11, 80, 21); // 设置坐标
comboBox.addItem("身份证"); // 为下拉列表中添加项
comboBox.addItem("军人证");
comboBox.addItem("学生证");
comboBox.addItem("工作证");
comboBox.setEditable(true);
getContentPane().add(comboBox); // 将下拉列表添加到容器中
JLabel lblResult = new JLabel("");
lblResult.setBounds(0, 57, 146, 15);
getContentPane().add(lblResult);
JButton btnNewButton = new JButton("确定");
btnNewButton.setBounds(200, 10, 67, 23);
getContentPane().add(btnNewButton);
btnNewButton.addActionListener(new ActionListener() { // 为按钮添加监听事件
@Override
public void actionPerformed(ActionEvent arg0) {
// 获取下拉列表中的选中项
lblResult.setText("您选择的是:" + comboBox.getSelectedItem());
}
});
}
public static void main(String[] args) {
JComboBoxTest frame = new JComboBoxTest(); // 创建窗体对象
frame.setVisible(true); // 使窗体可见
}
}
运行结果如图18.23所示。

JList列表框
列表框组件被添加到窗体中后,就会被指定长和宽。如果列表框的大小不足以容纳列表项的个数,那么需要设置列表框具有滚动效果,即把列表框添加到滚动面板中。用户在选择列表框中的列表项时,既可以通过单击列表项的方式选择列表项,也可以通过 “单击列表项+按住Shift键” 的方式连续选择列表项,还可以通过 “单击列表项+按住Ctrl键” 的方式跳跃式选择列表项,并能够在非选择状态和选择状态之间反复切换。列表框组件由 JList 对象表示,JList 类的常用构造方法如下。
-
public void JList():创建一个空的 JList 对象。
-
public void JList(Object[] listData):创建一个显示指定数组中的元素的JList对象。
-
public void JList(Vector listData):创建一个显示指定 Vector 中的元素的 JList 对象。
-
public void JList(ListModel dataModel):创建一个显示指定的非 null 模型的元素的 JList 对象。
例如,使用数组类型的数据作为创建 JList 对象的参数,关键代码如下:
String[] contents = {"列表1","列表2","列表3","列表4"};
JList jl = new JList(contents);
再如,使用 Vector 类型的数据作为创建 JList 对象的参数,关键代码如下:
Vector contents = new Vector();
JList jl = new JList(contents);
contents.add("列表1");
contents.add("列表2");
contents.add("列表3");
contents.add("列表4");
【例18.19】在列表框中显示用户的所选内容(实例位置:资源包\TM\sl\18\19)
创建 JListTest 类,并继承 JFrame 类,在窗体中创建列表框对象,当单击 “确认” 按钮时,把被选中的列表项显示在文本域中。
import java.awt.Container;
import java.awt.event.*;
import javax.swing.*;
public class JListTest extends JFrame {
public JListTest() {
Container cp = getContentPane(); // 获取窗体主容器
cp.setLayout(null); // 容器使用绝对布局
// 创建字符串数组,保存列表的中的数据
String[] contents = { "列表1", "列表2", "列表3", "列表4", "列表5", "列表6" };
JList<String> jl = new JList<>(contents); // 创建列表,并将数据作为构造参数
JScrollPane js = new JScrollPane(jl); // 将列表放入滚动面板
js.setBounds(10, 10, 100, 109); // 设定滚动面板的坐标和大小
cp.add(js);
JTextArea area = new JTextArea(); // 创建文本域
JScrollPane scrollPane = new JScrollPane(area); // 将文本域放入滚动面板
scrollPane.setBounds(118, 10, 73, 80); // 设定滚动面板的坐标和大小
cp.add(scrollPane);
JButton btnNewButton = new JButton("确认"); // 创建确认按钮
btnNewButton.setBounds(120, 96, 71, 23); // 设定按钮的坐标和大小
cp.add(btnNewButton);
btnNewButton.addActionListener(new ActionListener() { // 添加按钮事件
public void actionPerformed(ActionEvent e) {
// 获取列表中选中的元素,返回java.util.List类型
java.util.List<String> values = jl.getSelectedValuesList();
area.setText(""); // 清空文本域
for (String value : values) {
area.append(value + "\n"); // 在文本域循环追加List中的元素值
}
}
});
setTitle("在这个窗体中使用了列表框");
setSize(217, 167);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new JListTest();
}
}
运行结果如图18.24所示。

编程训练(答案位置:资源包\TM\sl\18\编程训练)
【训练11】选择出生日期 使用下拉列表选择出生日期。
【训练12】模拟东北三省的省、市联动 使用下拉列表模拟东北三省的省、市联动。