Swing提供了两种列表组件,分别为下拉列表框(JComboBox)与列表框(JList),下拉列表框与列表框都是带有一些列列表项的组件,用户可以从中选择需要的列表项,列表框较下拉列表框更直观,它将所有的列表项罗列在列表框中,但下拉列表框较列表框更为便捷、美观,它将所有的列表项隐藏起来,当用户选用其中的列表项时才会显现出来,下面将讲解列表框与下拉列表框的用法与应用。
1.JComboBox下拉列表框
初次使用Swing中的下拉列表框时,会感觉到Swing中的下拉列表框与Windows操作系统中的下拉列表框有些相似,实质上两者并不完全相同,因为Swing中的下拉列表框不仅可以供用户从中选择列表项,也提供编辑列表项的功能,
下拉列表框是一个条状的显示区,它具有下拉功能,在下拉列表框的右方有一个倒三角形的按钮,当用户单击该按钮时,下拉列表框中的列表项形式显示出来。
Swing中的下拉列表框使用JComboBox类的对象表示,它是javax.swing.JComponent类的子类,常用构造方法如下:
- public JComboBox():创建具有默认数据模型的JComboBox;
- public JComboBox(ComboBoxModel dataModel):创建一个JComboBox类对象,下拉列表中的数据使用ComboBoxModel中的数据,ComboBoxModel是一个用于组合框的数据模型,它具有选择项的概念;
- public JComboBox(Object[] arrayDate):创建包含指定数组中的元素的JComboBox类的对象;
- public JComboBox(Vector vector):创建包含指定Vector中的元素JComboBox类对象,Vector类是一个可增长的对象数组,与数组一样,它包含可以使用整数索引进行访问的组件,但Vector类的对象大小可以根据需要增大或缩小,以适应创建Vector类的对象后进行添加或移除列表项的操作;
JComboBox类的常用方法以说明如下表:
方法 | 说明 |
---|---|
addItem(Object anObject) | 为列表添加列表项 |
getItemCount() | 返回列表中的列表项数 |
getSelectedItem() | 返回当前所选列表项 |
getSelectedIndex() | 返回列表中与给定列表项匹配的第一个选项 |
removeItem(Object anObject) | 列表中移除列表项 |
setEditable(boolean aFlag) | 确定JComboBox中的字段是否可编辑,参数设置为true,表示可以编辑,否则不能编辑 |
下面看一个列表的例子,代码如下:
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Dpc extends JFrame {
public Dpc() {
//创建容器
Container ct = getContentPane();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("下拉列表框的使用");
setBounds(100, 100, 317, 147);
ct.setLayout(null);//设置绝对布局
//创建标签
JLabel lblNewLabel = new JLabel("请选择证件:");
lblNewLabel.setBounds(28, 14, 80, 15);
ct.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);
ct.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);
ct.add(btnNewButton);
btnNewButton.addActionListener(new ActionListener() {//为按钮添加监听事件
public void actionPerformed(ActionEvent arg0) {
lblResult.setText("您选择的是:"+comboBox.getSelectedItem());//获取下拉列表中的选中项
}
});
}
public static void main(String[] args) {
Dpc frame = new Dpc();//创建窗体对象
frame.setVisible(true);//使窗体可见
}
}
返回结果:
下面再看其他几种添加下拉列表数据的例子:
public JComboBox(Object[] arrayDate)数组形式的构造方法来创建下拉列表,代码如下:
String arr[] = {"列表项1","列表项2","列表项3","列表项4"};
JComboBox<String> jc = new JComboBox<String>(arr);
public JComboBox(ComboBoxModel dataModel)数据模型形式的构造方法,代码如下:
String arr[] = {"列表项1","列表项2","列表项3","列表项4"};
//创建下拉列表模型
ComboBoxModel cm = new DefaultComboBoxModel(arr);
JComboBox<String> jc = new JComboBox<String>();
//向下拉列表中添加模型
jc.setModel(cm);
public JComboBox(Vector vector)构造方法,代码如下:
String arr[] = {"列表项1","列表项2","列表项3","列表项4"};
//创建Vector对象
Vector vt = new Vector();
JComboBox<String> jc = new JComboBox<String>(vt);
//将值添加到Vector对象中
vt.add(arr[0]);
vt.add(arr[1]);
vt.add(arr[2]);
vt.add(arr[3]);
2.JList列表框组件
列表框(JList)与下拉列表框的区别不仅表现在外观上,当激活下拉列表框时,还会出现下拉列表框中的内容,但列表框只是在窗体上占据固定的大小,如果需要列表框具有滚动效果,可以把列表框放入滚动面板中,用户在选择列表框中的某一列表项时,按住<shift>键并选择列表框中的其他列表项,则当前列表项和其他列表项之间的列表项将全部被选中,也可以按住<Ctrl>键单击列表框中的单个列表项,这样可以使列表框中被单击的列表项反复切换非选择状态或选择状态。
Swing中使用JList类对象来表示列表框,下面列举几个常用的构造方法:
- public JList():构造一个具有空的、只读模式的JList;
- public JList(Object[] listData):构造一个JList,使其显示指定数组中的元素;
- public JList(Vector listDate):构造一个JList,使其显示指定Vector类的对象中的元素;
- public JList(ListModel dataModel):根据指定的非null模型构造一个显示元素的List;
JList构造方法与JComboBox中构造方法类似,就不多做讲解了。
由于JList是支持多选的,因此如果要获取JList中的被选中的列表项,可以使用getSelectedValuesList()方法,该方法的返回值是一个java.util.List类型的队列集合,用来表示JList中的所有被选中的列表项
JList也可以支持单选,代码如下:
/*
* SINGLE_SELECTION:单选
* SINGLE_INTERVAL_SELECTION:只能连接选中相邻的元素
* MULTIPLE_INTERVAL_SELECTION:默认的多选
*/
jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jl.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
下面展示JLis列表框中选中的项,代码如下:
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ListSelectionModel;
import javax.swing.WindowConstants;
public class Dpc extends JFrame {
public Dpc() {
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类型
List<String> values = jl.getSelectedValuesList();
area.setText(""); // 清空文本域
for (String value : values) {
area.append(value + "\n"); // 在文本域循环追加List中的元素值
}
}
});
setTitle("在这个窗体中使用了列表框");
setSize(217, 167);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public static void main(String args[]) {
new Dpc();
}
}
返回结果: