Swing中提供两种列表组件,分别是列表框(JList)和组合框(JComboBox)。
一、JList组件
构造方法:
public JList():构造一个空的、具有只读模型的JList。
public JList(Object[] listData):构造一个显示指定数组元素的JList。
public JList(Vector listData):构造一个 显示指定Vector中元素的JList 。
public Jlist(ListModel dataModel):根据指定的非null模型构造一个JList。
常用方法:
public int getItemCount():获取列表中的选项个数。
public void remove(int n):从列表的选项菜单中删除指定索引的选项。
public void removeAll():删除列表中的全部选项。
public int getSelectedIndex():返回最小的选择单元索引;只选择单个项时,返回该选择单元索引。
public int[] getSelectedIndices():返回所选的全部索引的数组(按升序排列)。
public List<E> getSelectedValuesList():根据列表中的索引,按照增加的顺序返回所有选定项目的列表。
public void setSelectionMode(int selectionMode):设置列表选择模型(参数0、1、2对应单个、连续多个、不连续多个)。
事件:
列表事件有两种:
一是鼠标双击某个选项:双击选项是动作事件,相关的接口是MouseListener,注册监视器的方法是addMouseListener(),接口方法是mouseClicked(MouseEvent e)。
二是鼠标单击某个选项:单击选项是选项事件,相关的接口是ListSelectionListener,注册监视器的方法是addListSelectionListener,接口方法是valueChanged(ListSelectionEvent e)。
代码示例:
package com.java.swing; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Iterator; import java.util.Vector; import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; public class JListTest extends JFrame { /** * */ private static final long serialVersionUID = 1L; public JListTest() { Container cp = this.getContentPane(); this.setTitle("JList列表框"); this.setBounds(0, 0, 250, 170); this.setDefaultCloseOperation(EXIT_ON_CLOSE); cp.setLayout(null); // 方法一 String[] contents = { "1java", "1数据结构", "1数据库", "1计算机系统", "1操作系统", "1C语言" }; JList<String> jl = new JList<>(contents); jl.setBounds(20, 10, 100, 100); jl.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); cp.add(jl); // // 方法二 // Vector<String> vector = new Vector<String>(); // JList<String> jl = new JList<>(vector); // vector.add("2java"); // vector.add("2数据结构"); // vector.add("2数据库"); // vector.add("2计算机系统"); // vector.add("2操作系统"); // vector.add("2C语言"); // //方法三 // String[] contents = { "3java", "3数据结构", "3数据库", "3计算机系统", "3操作系统", "3C语言" }; // DefaultListModel<String> model = new DefaultListModel<String>(); // for(String content:contents) // model.addElement(content); // JList<String> jl = new JList<String>(model); // jl.setBounds(20, 10, 100, 100); // cp.add(jl); JScrollPane js1 = new JScrollPane(jl); js1.setBounds(20, 10, 100, 100); cp.add(js1); JTextArea area = new JTextArea(); JScrollPane js2 = new JScrollPane(area); js2.setBounds(140, 10, 75, 100); cp.add(js2); // 注册选项监视器 jl.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { // 获取列表选中的元素 java.util.List<String> values = jl.getSelectedValuesList(); area.setText(""); Iterator<String> it = values.iterator(); while (it.hasNext()) { area.append(it.next() + "\n"); } } }); // 注册动作事件监视器 jl.addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub if (e.getClickCount() == 2) { java.util.List<String> values = jl.getSelectedValuesList(); area.setText(""); Iterator<String> it = values.iterator(); while (it.hasNext()) { area.append(it.next() + "\n"); } } } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } }); } public static void main(String args[]) { JListTest frame = new JListTest(); frame.setVisible(true); } }
二、JComboBox组件
构造方法:
public JComboBox():建立一个没有选项的JComboBox对象。
public JComboBox(Object[] items):利用对象数组构造一个JComboBox对象。
public JComboBox(Vector<?> items):利用Vector构造一个JComboBox对象。
public JComboBox(ComboBoxModel<E> aModel) :创建一个 JComboBox ,从现有的 ComboBoxModel获取其项目。
常用方法:
public void addItem(Object obj):向组合框加选项。
public int getItemCount():获取组合框的条目总数。
public void removeItem(Object ob):删除指定选项。
public void removeItemAt(int index):删除指定索引的选项。
public void insertItemAt(Object ob,int index):在指定的索引处插入选项。
public int getSelectedIndex():获取所选项的索引值(从0开始)。
public Object getSelectedItem():获得所选项的内容。
public void setEditable(boolean b):设为可编辑。组合框的默认状态是不可编辑的,需要调用本方法设定为可编辑,才能响应选择输入事件。
事件:
在JComboBox对象上发生事件分为两类。
一是用户选定项目,属于选项事件,用于获取用户所选的项目,接口是ItemListener,注册监视器的方法是addItemListener(),接口方法是itemStateChanged(ItemEvent e)。
二是用户输入项目后按回车键,属于动作事件,用于读取用户的输入,接口是ActionListener ,注册监视器的方法是addActionListener (),接口方法是actionPerformed(ActionEvent e)。
代码示例:
package com.java.swing; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.*; public class JComboBoxTest extends JFrame { /** * */ private static final long serialVersionUID = 1L; public JComboBoxTest() { Container cp = this.getContentPane(); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setTitle("下拉列表框"); this.setBounds(0, 0, 350, 200); cp.setLayout(null); JLabel myLable = new JLabel("请选择课程:"); myLable.setBounds(20, 20, 80, 20); cp.add(myLable); // 方法一 JComboBox<String> comboBox = new JComboBox<String>(); comboBox.addItem("1java"); comboBox.addItem("1数据结构"); comboBox.addItem("1数据库"); comboBox.addItem("1计算机系统"); comboBox.addItem("1操作系统"); comboBox.addItem("1C语言"); // // 方法二 // String[] contents = { "2java", "2数据结构", "2数据库", "2计算机系统", "2操作系统", "2C语言"}; // JComboBox<String> comboBox = new JComboBox<String>(contents); // // 方法三 // String[] contents = { "3java", "3数据结构", "3数据库", "3计算机系统", "3操作系统", "3C语言"}; // ComboBoxModel<String> model = new DefaultComboBoxModel<String>(contents); // JComboBox<String> comboBox = new JComboBox<String>(model); // comboBox.setModel(model); comboBox.setBounds(110, 20, 80, 20); comboBox.setEditable(true); // 设置为可编辑 cp.add(comboBox); JLabel lblResult = new JLabel(""); lblResult.setBounds(20, 57, 200, 15); cp.add(lblResult); // 注册选项事件监视器 comboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e){ lblResult.setText("选择的课程:" + comboBox.getSelectedItem()); } }); // 注册动作事件监视器 comboBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { lblResult.setText("选择的课程:" + comboBox.getSelectedItem()); } }); } public static void main(String[] args) { JComboBoxTest frame = new JComboBoxTest(); frame.setVisible(true); } }