Swing中提供了两种列表组件,分别是下拉列表框与列表框。列表框较下拉列表框更直观,它将所有的项目罗列在列表框中;但下拉列表框较列表框更为便捷、美观,它将所有的项目隐藏起来,当用户选用其中的项目时才会显现出来。
一、下拉列表框组件
1、JComboBox类
初次使用Swing中的下拉列表框时,会感觉到该类下拉列表框与Windows操作系统中的下拉列表框有一些相似,实质上两者并不相同,因为Swing中的下拉列表框不仅可以供用户从中选择项目,也提供编辑项目中内容的功能。
Swing中的下拉列表框使用JComboBox类对象来表示,它时javax.swing.JComponent类的子类,常用的构造方法如下:
(1)public JComboBox()
(2)public JComboBox(ComboBoxModel dataModel)
(3)public JComboBox(Object[] arrayData)
(4)public JComboBox(Vector vector)
2、JComboBox模型
在开发程序中,一般将下拉列表框中的项目封装为ComboBoxModel。ComboBoxModel为接口,它代表一般模型,可以自定义一个类实现该接口,然后在初始化JComboBox对象向上转型为ComboBoxModel接口类型,但是必须实现以下两种方法:
(1)public void setSelectedItem(Object item):设置下拉列表框中的选择项
(2)public Object getSelectedItem():返回下拉列表框中的选中项
自定义这个类出来实现该接口之外,还可以继承AbstractListModel类,在该类中有两个操作下拉列表框的重要方法:
(1)getSize():返回列表的长度
(2)getElementAt(int index):返回指定索引处的值
示例如下:
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;
public class JComboBoxModelTest extends JFrame{
JComboBox<String> jc = new JComboBox<String>(new MyComboBox());
JLabel jl = new JLabel("请选择证件:");
public JComboBoxModelTest() {
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(jl);
c.add(jc);
setSize(400,400);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public static void main(String args[]) {
new JComboBoxModelTest();
}
}
class MyComboBox extends AbstractListModel<String> implements ComboBoxModel<String>{
String selecteditem = null;
String[] test = {"身份证","军人证","学生证","工作证"};
public String getElementAt(int index) {
return test[index];
}
public int getSize() {
return test.length;
}
public void setSelectedItem(Object item) {
selecteditem = (String)item;
}
public Object getSelectedItem() {
return selecteditem;
}
}
运行结果如下图所示:
二、列表框组件
列表框只是在窗体上占据固定的大小,如果需要列表框具有滚动效果,可以将列表框放入滚动面板中。用户在选择列表框中的某一项时,按住Shift键并选择列表框中的其他项目,则当前选项和其他项目之间的选项全部被选中;也可以按住Ctrl键并单击列表框中的单个项目,实现多选。
Swing中JList类对象来表示列表框,列举如下几个构造方法:
1、public void JList()
2、public void JList(Object[] listData)
3、public void JList(Vector listData)
4、public void JList(ListModel dataModel)
列表框的示例如下:
import java.awt.Container;
import javax.swing.AbstractListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.WindowConstants;
public class JListTest extends JFrame{
public JListTest() {
Container c = getContentPane();
c.setLayout(null);
JList<String> jl = new JList<String>(new MyListModel());
JScrollPane js = new JScrollPane(jl);
js.setBounds(10,10,100,100);
c.add(js);
setSize(400,400);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public static void main(String args[]) {
new JListTest();
}
}
class MyListModel extends AbstractListModel<String>{
private String[] contents = {"列表1","列表2","列表3","列表4","列表5","列表5"};
public String getElementAt(int x) {
if(x<contents.length) {
return contents[x++];
}else {
return null;
}
}
public int getSize() {
return contents.length;
}
}
实例运行结果如下: