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

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

[外链图片转存中…(img-powhw15y-1645016303781)]

image-20220216204511361

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小旺不正经

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值