Java程序设计 图形用户界面 【十二】下拉列表JComboBox

682 阅读2分钟

这是我参与2022首次更文挑战的第30天,活动详情查看:2022首次更文挑战

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();
    }
}

image-20220216170632836

image-20220216170638665

使用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();
    }
}

image-20220216180026681

使用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();
    }
}

image-20220216204453546

image-20220216204500391

image-20220216204511361