Swing中提供了两种列表组件,分别是下拉列表框和列表框。列表框较下拉列表框更加直观,它将所有的项目罗列在表框中;但下拉列表框较列表框更加便捷、美观,它将所有的项目隐藏起来,当用户选中其中的项目时才会显现出来。

下拉列表框组件(JComboBox)

下拉列表框组件是一个带条状的显示区,它具有下拉功能,在下拉列表框的右方存在一个倒三角形的按钮,当用户单击该按钮时,下拉列表框中的项目将会以列表的形式显示出来。下拉列表框中的内容可以被封装在ComboBoxModel类型、数组或Vector类型中。

  1. package MyPackage_2;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. public class TestClass extends JFrame{
  7. public TestClass(String str){
  8. super(str);
  9. super.setBounds(100,100,350,200);
  10. super.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  11. Container c1=super.getContentPane();
  12. c1.setLayout(null);//设置为绝对布局
  13. /*
  14. 可以使用addItem方法直接添加选项框内容:
  15. JComboBox<String> jc=new JComboBox<>();
  16. jc.addItem("学生证");//索引为0
  17. jc.addItem("身份证");//索引为1
  18. jc.addItem("工作证");//索引为2
  19. jc.setBounds(10,10,80,20);
  20. */
  21. /*
  22. 可以把选项框的内容存在数组中
  23. String items[]={"学生证","身份证","工作证"};
  24. JComboBox<String> jc=new JComboBox<>(items);
  25. jc.setBounds(10,10,80,20);
  26. */
  27. /*可以把选项框的内容封装在JComboBoxModel类中*/
  28. JComboBox<String> jc=new JComboBox<>();
  29. String items[]={"学生证","身份证","工作证"};
  30. ComboBoxModel co=new DefaultComboBoxModel(items);//等于号右边是ComboBoxModel的实现类接口,创建了一个下拉列表模型
  31. jc.setModel(co);//向列表中添加列表模型
  32. jc.setBounds(10,10,80,20);//设置下拉列表框的位置
  33. JButton jb=new JButton("打印");
  34. jb.setBounds(10,50,80,20);//设置“打印”按钮的位置
  35. jb.addActionListener(new ActionListener() {//添加事件监听
  36. @Override
  37. public void actionPerformed(ActionEvent e) {
  38. System.out.println("选中的索引:"+jc.getSelectedIndex());//打印选中的索引值
  39. System.out.println("选中的选项:"+jc.getSelectedItem()); //打印选中的内容
  40. System.out.println("------------------------------------");
  41. }
  42. });
  43. c1.add(jb);//把“打印”按钮添加到c1中
  44. c1.add(jc);//把下拉列表框添加到c1中
  45. super.setVisible(true);//设置窗体可见
  46. }
  47. public static void main(String[] args) {
  48. TestClass d1=new TestClass("JF窗体");
  49. }
  50. }

运行结果:
image.png

2.列表框组件(JList)
列表框在窗体上占有固定大小的位置,如果需要列表框具有滚动效果(如果不添加滚动条,超过范围的文本将无法显示,因此一般都是配合滚动面板使用的),可以讲列表框放入滚动面板中。用户在选择列表框中的某一项时,还可以按住Shitf键并选择列表框中的其它选项,则当前选项和其它选项之间的选项都被选中(单选状态除外);用户也可以按住Ctrl键并选择某一个(单个)选项来切换选中与未选中状态。JList提供了三种选择模式:_SINGLE_SELECTION:单选模式
SINGLE_INTERVAL_SELECTION:只能选择相邻的元素
MULTIPLE_INTERVAL_SELECTION:无限制选择模式(该模式为默认模式)

下面看一个实例:

  1. package MyPackage_2;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. public class TestClass extends JFrame{
  5. public TestClass(String str){
  6. super(str);
  7. super.setBounds(100,100,350,200);
  8. super.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  9. Container c1=super.getContentPane();
  10. c1.setLayout(null);//设置为绝对布局
  11. /*
  12. 列表框内容存放再数组中,创建列表框对象时参数使用该数组
  13. String items[]={"2691397780@qq.com","wjh1314@126.com","zx_123@163.com",
  14. "2693469975@qq.com","wjh_520@163.com","gsl_1314@126.com",
  15. "alibaba@126.com","3679462219@qq.com","gdtu_gz@163.com"};
  16. JList<String> jl=new JList<>(items);//创建列表框对象,内容是数组items的所有元素
  17. */
  18. String items[]={"2691397780@qq.com","wjh1314@126.com","zx_123@163.com",
  19. "2693469975@qq.com","wjh_520@163.com","gsl_1314@126.com",
  20. "alibaba@126.com","3679462219@qq.com","gdtu_gz@163.com"};
  21. DefaultListModel<String> li=new DefaultListModel();//创建一个列表框模型
  22. for(String tmp:items){
  23. li.addElement(tmp);//向模型中添加内容
  24. }
  25. //li.addElement("新元素"); 可以使用addElement方法添加新内容至列表框,这是使用模型的好处
  26. JList<String> jl=new JList<>();//创建列表框对象
  27. jl.setModel(li);//向列表中添加列表模型
  28. jl.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);//设置列表框的选择模式
  29. /*
  30. SINGLE_SELECTION:单选模式
  31. SINGLE_INTERVAL_SELECTION:只能选择相邻的元素
  32. MULTIPLE_INTERVAL_SELECTION:无限制选择模式(该模式为默认模式)
  33. */
  34. JButton jb=new JButton("打印");
  35. jb.addActionListener(new ActionListener() {
  36. @Override
  37. public void actionPerformed(ActionEvent e) {
  38. java.util.List<String> x=jl.getSelectedValuesList();//获取列表框中选中的所有元素
  39. for(String tmp:x){
  40. System.out.println(tmp);//再控制台打印列表框中选中的所有元素
  41. }
  42. System.out.println("---------------------------------");
  43. }
  44. });
  45. jb.setBounds(200,20,80,30);//设置“打印”按钮的大小和位置
  46. c1.add(jb);//把“打印”按钮添加到c1中
  47. JScrollPane js=new JScrollPane(jl);//创建滚动面板对象js,把列表框添加到滚动面板中,参数是列表框jl
  48. js.setBounds(20,20,150,100);//设置滚动面板的位置和大小即可,无需再设置列表框的位置和大小
  49. c1.add(js);//把滚动面板js放进JF窗体中
  50. super.setVisible(true);//设置JF窗体可见
  51. }
  52. public static void main(String[] args) {
  53. TestClass d1=new TestClass("JF窗体");
  54. }
  55. }

运行结果:
image.png