一、列表组件
Swing 中提供了两种列表组件,分别为下拉列表框与列表框。下拉列表框与列表框都是带有一系列项目的组件,用户可以从中选择需要的项目。列表框较下拉列表框更直观,它将所有的项目罗列在列表框中;但下拉列表框较列表框更为便捷、美观,它将所有的项目隐藏起来,当用户选用其中的项目时才会显现出来。
1.1 下拉列表框组件
1.1.1 JComboBox 类
下拉列表框是一个带条状的显示区,它具有下拉功能,在下拉列表框的右方存在一个倒三角形的按钮,当用户单击该按钮时,下拉 列表框中的项目将会以列表形式显示出来。
Swing 中的下拉列表框使用 JComboBox 类对象来表示,它是 javax.swing.JComponent 类的子类。它的常用构造方法如下 :
( 1 ) :public JComboBox() 。
( 2 ) :public JComboBox(ComboBoxModel dataModel) 。
( 3 ) :public JComboBox(Objet[] arrayDate) 。
( 4 ) :public JComboBox(Vector vector) 。
在初始化下拉列表框时,可以选择同时指定下拉列表框中的项目内容,也可以在程序中使用其他方法设置下拉列表框中的内容,下拉列表框中的内容可以被封装在 ComboBoxModel 类型、数组或 Vector 类型中。
1.1.2 JComboBox 模型
在开发过程中,一般将下拉列表框中的项目封装为 ComboBoxModel 的情况比较多。 ComboBoxModel 为接口,它代表一般模型,可以自定义一个类实现该接口,然后再初始化 JComboBox 对象时向上转型为 ComboBoxModel 接口类型,但是必须实现以下两种方法 :
( 1 ) :public void setSelectedIten(Object item) 。
( 2 ) :public Object getSelectedItem() 。
其中,setSelectedItem() 方法用于设置下拉列表框中的选中项, getSelectedItem() 方法用于返回下拉列表框中的选中项,有了这两个方法,就可以轻松地对下拉列表框中的项目进行操作。
自定义这个类除了实现该接口之外,还可以继承 AbstractListModel 类,在该类中也有两个操作下拉列表框的重要方法 :
( 1 ) : getSize() :返回列表的长度 。
( 2 ) : getElementAt(int index) :返回指定索引处的值 。
eg 1.1.2 在项目中创建 JComboBoxModelTest 类,使该类继承 JFrame 类称为窗体组件,在类中创建下拉列表框,并添加到窗体中。
package com.SwingDemo;
import java.awt.*;
import javax.swing.*;
public class JComboBoxModelTest extends JFrame {
private static final long serialVersionUID = 1L;
JComboBox<String> jBox = new JComboBox<>(new MyComboBox());
JLabel jLabel = new JLabel("请选择证件:");
public JComboBoxModelTest() {
setSize(new Dimension(160, 180));
setVisible(true);
setTitle("在窗口中设置下拉列表框");
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
Container container = getContentPane();
container.setLayout(new FlowLayout());
container.add(jBox);
container.add(jLabel);
}
public static void main(String[] args) {
new JComboBoxModelTest();
}
}
class MyComboBox extends AbstractListModel<String> implements ComboBoxModel<String> {
private static final long serialVersionUID = 1L;
String selectedItem = null;
String[] teStrings = { "身份证", "军人证", "学生证", "工作证" };
@Override
public String getElementAt(int index) { //根据索引返回值
return teStrings[index];
}
@Override
public int getSize() { //返回下拉列表框项目的数目
return teStrings.length;
}
@Override
public void setSelectedItem(Object anItem) { //设置下拉列表框项目
selectedItem = (String) selectedItem;
}
@Override
public Object getSelectedItem() { //获取下拉列表框项目
return selectedItem;
}
public int getIndex() {
for (int i = 0; i < teStrings.length; i++) {
if (teStrings[i].equals(getSelectedItem())) {
return i;
}
}
return 0;
}
}
运行结果为 :
自定义了一个实现 ComboBoxModel 接口