大家好,欢迎来到IT知识分享网。
组合框(JComboBox)是一个下拉列表,其特点是将多个选项折叠在一起,只显示最前面或被选中的一项。组合框有两种形式:不可编辑和可编辑,对于不可编辑的组合框,用户只能在现有的选项中进行选择;对于可编辑的组合框,用户既可以在现有选项中选择,也可以输入要选择的选项,甚至可以输入列表中没有的内容。组合框是由JcomboBox类来实现的,可以通过JComboBox类的setEditable(boolean b)方法来设置组合框是否可编辑。 JComboBox类是一个泛型类,其构造方法如下:
- JComboBox():创建一个没有任何选项的组合框。
- JComboBox(E[] items):创建一个组合框,其选项来自于指定的数组,E是泛型的类型参数名称。
- JComboBox(ComboBoxModel<E> aModel):创建一个组合框,其选项来自于ComboBoxModel。
例如,下面的代码创建一个包含4个可选项的组合框。
String items[]= {“北京”,”黑龙江”,”吉林”,”辽宁”};
JComboBox jcb=new JComboBox(items);
JComboBox类中定义了添加、删除和获取选项的相关方法,常用方法如下:
- void addItem(E item):在下拉列表末尾添加新的选项。
- void insertItemAt(E item,int index):在index指定的位置添加新的选项。
- void removeItem(Object anObject):删除指定的选项。
- void removeItemAt(int anIndex):删除指定位置的可选项。
- void removeAllItems():删除所有可选项。
- Object getSelectedItem():返回当前选中项。
- int getSelectedIndex():返回当前选中项的索引。
- int getItemCount():返回列表中的项数。
- void setSelectedItem(Object anObject): 设置当前选中项。
- void setSelectedIndex(int anIndex):设置当前选中项的索引。
例如,通过下面的代码可以动态地向组合框中增加新的选项。
jcb.addItem(“山东“); //在下拉列表的末尾增加新的选项
jcb.insertItemAt(“上海“, 1); //在下拉列表的第1个位置增加新的选项
上面的代码是向组合框中增加String对象,下拉列表中显示的是字符串。如果向下拉列表中增加其它类型的对象,那么在该下拉列表中显示的是对象的toString()方法返回的内容。toString()方法是Object类中定义的方法,其返回值是对象的class名称+@+hashCode的十六进制字符串。如果想要在下拉列表中显示指定的内容,则需重写toString()方法。
【例1】利用数组创建组合框。
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JComboBoxDemo1 { public static void main(String[] args) { Province provinces[]= {new Province(11,"北京"), new Province(23,"黑龙江"), new Province(22,"吉林"), new Province(21,"辽宁")}; JFrame frame=new JFrame("组合框示例"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); //窗口居中显示 frame.setSize(300,200); JPanel panel=new JPanel(); JTextField textField=new JTextField(); JComboBox comboBox=new JComboBox(provinces);//创建组合框 ① panel.add(comboBox); frame.add(panel,BorderLayout.CENTER); frame.add(textField,BorderLayout.NORTH); //在下拉列表的末尾增加新的选项 comboBox.addItem(new Province(37,"山东")); //在下拉列表的第1个位置增加新的选项 comboBox.insertItemAt(new Province(31,"上海"), 1); //注册事件监听器(匿名类) comboBox.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { JComboBox jcb=(JComboBox)e.getSource();//获取事件源 //返回当前选中项 Province province=(Province)jcb.getSelectedItem(); ② //在文本框中显示选中项 textField.setText(province.code+"-"+province.name); } }); comboBox.setSelectedIndex(2);//设置当前选中项为第2项 frame.setVisible(true); } } class Province{ int code; String name; public Province(int code,String name){ this.code=code; this.name=name; } //重写方法 public String toString() { return name; } }
运行上述程序,由于设置初始选中项为第2项,因此显示结果如图1(a)所示。单击下拉列表,显示结果如图1(b)所示。可以在下拉列表中的重新选择选中项,每次修改选选中项都会触发ActionEvent事件,并在文本框中显示当前被选中项的信息。
由于JComboBox是一个泛型类,因此,在创建组合框时可以通过类型参数指定下拉列表中存储的对象类型。例如,在例1中,可以采用如下方式创建组合框对象。
JComboBox<Province> comboBox=new JComboBox<Province>(provinces);
组合框可以使用ComboBoxModel来管理其数据模型,ComboBoxModel是一个泛型接口,它定义了操作组合框的基本操作。在实际应用中,一般采用DefaultComboBoxModel类的对象来管理组合框的数据模型,DefaultComboBoxModel是泛型接口MutableComboBoxModel的实现类,而MutableComboBoxModel是ComboBoxModel的子接口。DefaultComboBoxModel是一个泛型类,其主要方法如下:
- void addElement(E item):向组合框数据模型末尾添加一个元素。
- void insertElement(E item,int index):向组合框数据模型的指定位置添加一个元素。
- Object getElementAt(int index):获取组合框数据模型中指定位置的元素。
- void removeElement(Object obj):删除组合框数据模型中指定的元素。
- void removeAllElements():删除组合框数据模型中的所有元素。
- int getSize():获取组合框数据模型中元素的数量。
- void setSelectedItem(Object anObject):设置组合框数据模型中被选中的元素。
- Object getSelectedItem():返回组合框数据模型中被选中的元素。
下面是利用数据模型创建组合框的程序,其运行结果与例1是一致的。
【例2】利用数据模型创建组合框。
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JComboBoxDemo2 { public static void main(String[] args) { JFrame frame=new JFrame("组合框示例"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setSize(300,200); JPanel panel=new JPanel(); JTextField textField=new JTextField(); //创建组合框的数据模型 DefaultComboBoxModel<Province> model=new DefaultComboBoxModel<Province>(); model.addElement(new Province(11,"北京")); model.addElement(new Province(31,"上海")); model.addElement(new Province(23,"黑龙江")); model.addElement(new Province(22,"吉林")); model.addElement(new Province(21,"辽宁")); model.addElement(new Province(37,"山东")); JComboBox comboBox=new JComboBox(model);//创建组合框 panel.add(comboBox); frame.add(panel,BorderLayout.CENTER); frame.add(textField,BorderLayout.NORTH); //注册事件监听器(匿名类) comboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //返回数据模型中被选中的元素 Province province=(Province)model.getSelectedItem(); //在文本框中显示选中项 textField.setText(province.code+"-"+province.name); } }); //设置当前选中项为数据模型中的第2项 model.setSelectedItem(model.getElementAt(2)); frame.setVisible(true); } }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/138888.html