JComboBox应用ItemListener和FocusListener

       组合框JcomBox由一个文本行和一个列表框组成。组合框通常的显示形式是右边带有下拉箭头的文本行,列表框是隐藏的,单击右边的下拉箭头才可以显示列表框。既可以在组合框的文本行中直接输入数据,也可以从其列表框中选择数据项,被选择的数据项会显示在文本行中。

JComBox类的常用构造方法:

JComBox(),创建一个没有选项的JComBox对象。

JComBox(Vector vect),创建一个JComBox对象,其中的选项由向量表vect决定。
JComBox(Object item[])创建一个JComBox对象,其中的选项由对象数组item决定。可以是字符串数组。

JComBox类的常用方法:

void addActionListener(ActionListener e),向JComBox对象注册ActionEvent事件监听器。

void addItemListener(ItemListener e),向JComBox对象注册ItemEvent事件监听器。

void addFocusListener(addFocusListener e),向JComBox对象注册FocusEvent事件监听器。

void setSelectedIndex(int index),设置该索引被选中。

void setSelectedItem(Object object),设置该数据项被选中。

int getSelectedIndex(),获取当前选中数据项的索引。

Object getSelectedItem(),获取当前选中的数据项。

Object getItemAt(int index),获取索引为index的数据项。

int getItemCount(),获取JComBox中数据项的总数。

JComboBox应用ItemListener和FocusListener代码示例:



import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class JComboBoxTest extends JFrame {
    private JFrame jFrame = new JFrame("JComboBoxTest");
    private JButton jButton=new JButton("按钮");
    // 需要选择的条目
    String[] listData = new String[]{"A", "B", "C", "D", "E"};

    //用count记录ItemListener运行的次数
    int count=0;

    // 创建一个下拉列表框
    public JComboBox<String> jcomboBox = new JComboBox<String>(listData);
    public JComboBox<String> box = new JComboBox<String>(listData);

    public JComboBoxTest() {
        this.setLocationRelativeTo(null);
        this.setSize(500, 500);
        jcomboBox.setBounds(80, 280, 200, 40);
        this.getContentPane().add(jcomboBox, BorderLayout.NORTH);
        this.getContentPane().add(jButton,BorderLayout.SOUTH);
        // 添加条目选中状态改变的监听器
        // JComboBox默认选中的是0索引,即一开始选中的是 A
        // 当我们切换选项时,假设由A切换到D,则A就是没有选中的状态,则会触发 "处理未选中的状态"
        // 然后再选中D时,D被选上则会触发 "处理选中的状态"
        // 注意此时ItemListener事件运行了两次
        jcomboBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                System.out.println("ItemListener运行了 " +(++count)+" 次");
                // 处理未选中的状态
                if (e.getStateChange() == ItemEvent.DESELECTED) {

                    System.out.println("取消: " + getdeselectindex(box,(String)e.getItem()) + " = " +
                            e.getItem());
                }
                // 处理选中的状态
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    System.out.println("选中: " + jcomboBox.getSelectedIndex() + " = " +
                            jcomboBox.getSelectedItem());

                    System.out.println("选中: " + getdeselectindex(box,(String)e.getItem()) + " = " +
                            e.getItemSelectable().getSelectedObjects()[0]);

                    System.out.println("选中: " + ((JComboBox)e.getSource()).getSelectedIndex() + " = " +
                            ((JComboBox)e.getSource()).getSelectedItem());
                }
            }
        });

        jcomboBox.addFocusListener(new FocusListener() {
            //当点击其他组件如按钮时就会触发jcomboc 失去了焦点
            @Override
            public void focusLost(FocusEvent e) {
                // TODO Auto-generated method stub
                System.out.println("jcomboBox 失去了焦点");
            }
            //当点击jcombox时就会触发 jcomboBox 获得了焦点
            @Override
            public void focusGained(FocusEvent e) {
                // TODO Auto-generated method stub
                System.out.println("jcomboBox 获得了焦点");
            }
        });
        this.setVisible(true);
    }

    //没有返回取消的索引的方法,因此自己写了一个
    public int getdeselectindex(JComboBox jComboBox, String string) {
        for (int i = 0; i < jComboBox.getItemCount(); i++) {
            jComboBox.setSelectedIndex(i);
            if (jComboBox.getSelectedItem() == string)
                return i;
        }
        return 0;
    }

    public static void main(String[] args) {
        new JComboBoxTest();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值