Java程序设计 图形用户界面 【十二】下拉列表JComboBox
下拉列表JComboBox
JList是以列表框的形式进行显示的
有列表又可以自己输入数据这种组件就称为下拉列表框
JComboBox类可以完成这样的功能
JComboBox类的常用方法
方法 | 作用 |
---|---|
public JComboBox(ComboBoxModel aModel) | 利用ComboBox 构造一个JComboBox对象 |
public JComboBox(Object[] items) | 利用对象数组构造一个JComboBox对象 |
public JComboBox(Vector<?> items) | 利用Vector构成一个JComboBox对象 |
public Object getItemAt(int index) | 返回指定索引处的列表项 |
public int getItemCount() | 返回列表中的项数 |
public void addItem(Object anObject) | 为列表增加内容 |
public void setEditable(boolean aFlag) | 设置此下拉列表是否可编辑 |
public void setMaximumRowCount(int count) | 设置下拉列表显示的最大行数 |
public void setSelectedIndex(int anIndex) | 设置默认选项的索引号 |
public ComboBoxEditor getEditor() | 返回JComboBox的内容编辑器 |
public void configureEditor(ComboBoxEditor anEditor,Object anItem) | 初始化编辑器 |
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;
class MyComboBox{
private JFrame frame = new JFrame("一");
private Container cont = frame.getContentPane();
private JComboBox jcb1 = null;
private JComboBox jcb2 = null;
public MyComboBox(){
this.frame.setLayout(new GridLayout(2,1));
String n[] = {"A","B","C","D"};
Vector<String> v = new Vector<String>();
v.add("a");
v.add("b");
v.add("c");
v.add("d");
this.jcb1 = new JComboBox(n);
this.jcb2 = new JComboBox(v);
cont.add(this.jcb1);
cont.add(this.jcb2);
this.frame.setSize(300,150);
this.frame.setVisible(true);
this.frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
System.exit(1);
}
});
}
}
public class Hello {
public static void main(String[] args) {
new MyComboBox();
}
}
使用JComboBox建立了两个下拉列表框
在JComboBox中也可以使用ComboBoxModel接口来构造JComboBox中的列表内容,ComboBoxModel接口是ListModel接口的子类,继承ListModel中的所有操作方法
ComboBox接口增加的方法
方法 | 作用 |
---|---|
void setSelectedItem(Object anItem ) | 设置选项内容 |
Object getSelectedItem() | 返回选择项 |
使用ComboBox和AbstractListModel构造可编辑的JComboBox
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class MyComboBoxModel extends AbstractListModel implements ComboBoxModel{
String n[] = {"A","B","C","D"};
String item = null;
public Object getSelectedItem(){
return this.item;
}
public void setSelectedItem(Object arg){
this.item=(String) arg;
}
@Override
public int getSize() {
return this.n.length;
}
@Override
public Object getElementAt(int index) {
return this.n[index];
}
}
class MyComboBox{
private JFrame frame = new JFrame("一");
private Container cont = frame.getContentPane();
private JComboBox jcb1 = null;
public MyComboBox(){
this.frame.setLayout(new GridLayout(2,1));
this.jcb1 = new JComboBox(new MyComboBoxModel());
jcb1.setBorder(BorderFactory.createTitledBorder("请选择"));
// 设置最多显示3个
jcb1.setMaximumRowCount(3);
jcb1.setEditable(true);
ComboBoxEditor editor = null;
editor = jcb1.getEditor();
jcb1.configureEditor(editor,"请选择");
cont.add(this.jcb1);
this.frame.setSize(180,150);
this.frame.setVisible(true);
this.frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
System.exit(1);
}
});
}
}
public class Hello {
public static void main(String[] args) {
new MyComboBox();
}
}
使用ComboBoxModel构造了JComBox对象,在程序中将JComboBox设置为可以编辑,即用户可以直接通过文本选择选项的内容
JComboBox事件处理
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MyComboBox implements ItemListener, ActionListener{
private JFrame frame = new JFrame("一");
private Container cont = frame.getContentPane();
private JComboBox jcb1 = null;
private JLabel label = new JLabel("A");
private String n[] ={"A","B","C","D"};
public MyComboBox(){
this.frame.setLayout(new GridLayout(2,1));
this.jcb1 = new JComboBox(this.n);
jcb1.addItemListener(this);
jcb1.addActionListener(this);
jcb1.setEditable(true);
cont.add(this.jcb1);
cont.add(label);
this.frame.setSize(300,200);
this.frame.setVisible(true);
this.frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
System.exit(1);
}
});
}
// 输入信息时触发
@Override
public void actionPerformed(ActionEvent e) {
String s = (String)this.jcb1.getSelectedItem();
this.label.setText(s);
}
// 选项改变时触发
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED){
String s = (String) e.getItem();
this.label.setText(s);
}
}
}
public class Hello {
public static void main(String[] args) {
new MyComboBox();
}
}
[外链图片转存中…(img-powhw15y-1645016303781)]