JComboBox组件

来自CloudWiki
跳转至: 导航搜索

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演示了组合框的创建以及使用

创建窗体

注意修改窗体的布局方式

向窗体中添加组件

Java2020-12-16.png

Java2020-12-17.png

类似的方法,向右侧的下来框中添加数值: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);
	}

程序运行结果如下图所示: