Java Swing组件:组合框

       组合框(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事件,并在文本框中显示当前被选中项的信息。

(a) ​​​​​​​(b)

       由于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);
	}
}
  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值