Swing中提供了两种列表组件,分别是下拉列表框和列表框。列表框较下拉列表框更加直观,它将所有的项目罗列在表框中;但下拉列表框较列表框更加便捷、美观,它将所有的项目隐藏起来,当用户选中其中的项目时才会显现出来。
下拉列表框组件(JComboBox)
下拉列表框组件是一个带条状的显示区,它具有下拉功能,在下拉列表框的右方存在一个倒三角形的按钮,当用户单击该按钮时,下拉列表框中的项目将会以列表的形式显示出来。下拉列表框中的内容可以被封装在ComboBoxModel类型、数组或Vector类型中。
package MyPackage_2;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class TestClass extends JFrame{public TestClass(String str){super(str);super.setBounds(100,100,350,200);super.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);Container c1=super.getContentPane();c1.setLayout(null);//设置为绝对布局/*可以使用addItem方法直接添加选项框内容:JComboBox<String> jc=new JComboBox<>();jc.addItem("学生证");//索引为0jc.addItem("身份证");//索引为1jc.addItem("工作证");//索引为2jc.setBounds(10,10,80,20);*//*可以把选项框的内容存在数组中String items[]={"学生证","身份证","工作证"};JComboBox<String> jc=new JComboBox<>(items);jc.setBounds(10,10,80,20);*//*可以把选项框的内容封装在JComboBoxModel类中*/JComboBox<String> jc=new JComboBox<>();String items[]={"学生证","身份证","工作证"};ComboBoxModel co=new DefaultComboBoxModel(items);//等于号右边是ComboBoxModel的实现类接口,创建了一个下拉列表模型jc.setModel(co);//向列表中添加列表模型jc.setBounds(10,10,80,20);//设置下拉列表框的位置JButton jb=new JButton("打印");jb.setBounds(10,50,80,20);//设置“打印”按钮的位置jb.addActionListener(new ActionListener() {//添加事件监听@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("选中的索引:"+jc.getSelectedIndex());//打印选中的索引值System.out.println("选中的选项:"+jc.getSelectedItem()); //打印选中的内容System.out.println("------------------------------------");}});c1.add(jb);//把“打印”按钮添加到c1中c1.add(jc);//把下拉列表框添加到c1中super.setVisible(true);//设置窗体可见}public static void main(String[] args) {TestClass d1=new TestClass("JF窗体");}}
运行结果:
2.列表框组件(JList)
列表框在窗体上占有固定大小的位置,如果需要列表框具有滚动效果(如果不添加滚动条,超过范围的文本将无法显示,因此一般都是配合滚动面板使用的),可以讲列表框放入滚动面板中。用户在选择列表框中的某一项时,还可以按住Shitf键并选择列表框中的其它选项,则当前选项和其它选项之间的选项都被选中(单选状态除外);用户也可以按住Ctrl键并选择某一个(单个)选项来切换选中与未选中状态。JList提供了三种选择模式:_SINGLE_SELECTION:单选模式
SINGLE_INTERVAL_SELECTION:只能选择相邻的元素
MULTIPLE_INTERVAL_SELECTION:无限制选择模式(该模式为默认模式)
下面看一个实例:
package MyPackage_2;import javax.swing.*;import java.awt.*;public class TestClass extends JFrame{public TestClass(String str){super(str);super.setBounds(100,100,350,200);super.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);Container c1=super.getContentPane();c1.setLayout(null);//设置为绝对布局/*列表框内容存放再数组中,创建列表框对象时参数使用该数组String items[]={"2691397780@qq.com","wjh1314@126.com","zx_123@163.com","2693469975@qq.com","wjh_520@163.com","gsl_1314@126.com","alibaba@126.com","3679462219@qq.com","gdtu_gz@163.com"};JList<String> jl=new JList<>(items);//创建列表框对象,内容是数组items的所有元素*/String items[]={"2691397780@qq.com","wjh1314@126.com","zx_123@163.com","2693469975@qq.com","wjh_520@163.com","gsl_1314@126.com","alibaba@126.com","3679462219@qq.com","gdtu_gz@163.com"};DefaultListModel<String> li=new DefaultListModel();//创建一个列表框模型for(String tmp:items){li.addElement(tmp);//向模型中添加内容}//li.addElement("新元素"); 可以使用addElement方法添加新内容至列表框,这是使用模型的好处JList<String> jl=new JList<>();//创建列表框对象jl.setModel(li);//向列表中添加列表模型jl.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);//设置列表框的选择模式/*SINGLE_SELECTION:单选模式SINGLE_INTERVAL_SELECTION:只能选择相邻的元素MULTIPLE_INTERVAL_SELECTION:无限制选择模式(该模式为默认模式)*/JButton jb=new JButton("打印");jb.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {java.util.List<String> x=jl.getSelectedValuesList();//获取列表框中选中的所有元素for(String tmp:x){System.out.println(tmp);//再控制台打印列表框中选中的所有元素}System.out.println("---------------------------------");}});jb.setBounds(200,20,80,30);//设置“打印”按钮的大小和位置c1.add(jb);//把“打印”按钮添加到c1中JScrollPane js=new JScrollPane(jl);//创建滚动面板对象js,把列表框添加到滚动面板中,参数是列表框jljs.setBounds(20,20,150,100);//设置滚动面板的位置和大小即可,无需再设置列表框的位置和大小c1.add(js);//把滚动面板js放进JF窗体中super.setVisible(true);//设置JF窗体可见}public static void main(String[] args) {TestClass d1=new TestClass("JF窗体");}}
运行结果:
