JComboBox组件
JComboBox组件是将按钮或可编辑字段与下拉列表组合的组件。用户可以从下拉列表中选择值,下拉列表在用户请求时显示。如果使组合框处于可编辑状态,则组合框将包括用户可在其中键入值的可编辑字段。
目录
构造方法
从Java SE 7开始,类JComboBox<E>是一个泛型类,例如JComboBox<String>包含String类型对象。JComboBox类有如下几种构造方法:
- JComboBox() :创建具有默认数据模型的 JComboBox。
- JComboBox(ComboBoxModel aModel) :创建一个 JComboBox,其项取自现有的 ComboBoxModel 中。
- JComboBox(E[] items) :创建包含指定数组中的元素的 JComboBox。
- JComboBox(Vector<E> items):创建包含指定 Vector 中的元素的 JComboBox。
常用方法
addItem()
1)可以调用addItem() 方法添加一个项目到 JComboBox。 例如:
JComboBox<String>comboFace=new JComboBox<String>(); //添加选项 comboFace.addItem("Arial");//添加字体选项Arial
这种方法只能添加元素在程序的尾部,可以使用insertItemAt方法在列表任何位置插入一个新选项:
comboFace.insertItemAt("Courier New", 0);
get/setSelectedItem()
2)可以调用get/setSelectedItem()获取/设置选中的对象。例如:
String fontface=(String) comboFace.getSelectedItem();//获得字体 int fontSize=Integer.parseInt((String) comboFontSize.getSelectedItem());
也可以调用get/setSelectedIndex()方法获取/设置 JComboBox 中选中项目的索引,再通过getItemAt方法获得该对象;
String fontFace1=comboFace.getItemAt(comboFace.getSelectedIndex());
removeAllItems()
3)removeAllItems()从 JComboBox 删除所有对象;removeItem()从 JComboBox 删除特定对象。例如:
comboFace.removeItemAt(0);//删除第一个 comboFace.removeItem("Arial");//删除Arial
setEditable()
4)setEditable()把一个组合框设置为可编辑的,默认组合框是不可编辑的。注意编辑只会影响当前项,它不会改变列表的内容。 comboFontSize.setEditable(true);//设置字号组合框可编辑
用设计模式设计
程序TestJComboBox.java演示了组合框的创建以及使用
创建窗体
注意修改窗体的布局方式
向窗体中添加组件
类似的方法,向右侧的下来框中添加数值:12,14,16,18,20,22,24,26,28,30
运行看一下效果
分析一下有什么事件
JComboBox的事件处理可分为两种:一种是用户选取项目时生成事件ItemEven,可以使用ItemListener来处理事件,另一种是用户在JComboBox上自行输入完毕后按下[Enter]键, 会产生ActionEvent事件,可以使用ActionListener处理器处理该事件。
添加事件监听器
字体下拉框
设计模式下:
右击下拉框 -> add event handler -> other -> item -> itemStateChanged :
comboFace.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { String fontface=(String) comboFace.getSelectedItem();//获得字体 int fontSize=Integer.parseInt((String)comboFontSize.getSelectedItem()); Font font = new Font(fontface, Font.PLAIN, fontSize); lblNewLabel.setFont(font); } });
字号下拉框
设计模式下:
右击下拉框 -> add event handler -> other -> item -> itemStateChanged :
comboFontSize.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { String fontface=(String) comboFace.getSelectedItem();//获得字体 int fontSize=Integer.parseInt((String)comboFontSize.getSelectedItem()); Font font = new Font(fontface, Font.PLAIN, fontSize); lblNewLabel.setFont(font); } });
用代码模式设计
构建窗体
package main; import java.awt.*; import javax.swing.*; public class TestJComboBox extends JFrame{ private JLabel lblDisplay; public TestJComboBox(String title) throws HeadlessException { super(title); this.setLayout(new BorderLayout()); lblDisplay=new JLabel("Hello World",JLabel.CENTER); this.add(lblDisplay,BorderLayout.CENTER); this.setSize(300,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); this.setVisible(true); } public static void main(String[] args) { TestJComboBox comboTest=new TestJComboBox("JComboBox Test"); } }
添加下拉菜单
为 TestJComboBox添加如下成员变量:
private JComboBox<String> comboFace; private JComboBox<String> comboFontSize;
同时,在构造方法里添加:
//空的下拉列表框 comboFace=new JComboBox<String>(); //添加选项 comboFace.addItem("Arial");//添加字体选项Arial comboFace.addItem("Microsoft YaHei UI"); comboFace.addItem("Consolas"); //包含数组的下拉列表框 String[] fontsize={"12","14","16","18","20","22","24","26","28"}; comboFontSize=new JComboBox<>(fontsize); comboFontSize.setEditable(true);//设置字号组合框可编辑 JPanel panel=new JPanel(); panel.add(comboFace); panel.add(comboFontSize); this.add(panel, BorderLayout.SOUTH);
分析一下有什么事件
JComboBox的事件处理可分为两种:一种是用户选取项目时生成事件ItemEven,可以使用ItemListener来处理事件,另一种是用户在JComboBox上自行输入完毕后按下[Enter]键, 会产生ActionEvent事件,可以使用ActionListener处理器处理该事件。
事件处理
例如,程序TestJComboBox.java演示了组合框的创建以及使用
//添加选择事件 comboFace.addItemListener(e->lblDisplay.setFont(newFont()));
//添加选择事件 comboFontSize.addItemListener(e->lblDisplay.setFont(newFont())); //添加输入事件 comboFontSize.addActionListener(e->lblDisplay.setFont(newFont()));
这里的newfont方法代码如下:
//获取要设置的字体和字形 private Font newFont() { String fontface=(String) comboFace.getSelectedItem();//获得字体 int fontSize=Integer.parseInt((String) comboFontSize.getSelectedItem()); return new Font(fontface, Font.PLAIN, fontSize); }
程序运行结果如下图所示: