Java ItemEvent事件及其方法getItemSelectable()、getItem()和getSource()的使用说明

       当我们从comboBox或下拉列表中选取一项时,其实自动产生了2个Item Event事件。Item Event有几个方法,这些方法在这2个事件上有不同意义。

一、ItemEvent的构造方法

       ItemEvent(ItemSelectable source, int id, Object item, int stateChange)
           ItemSelectable source: 产生事件的源
            Object                 item: 被影响的item (先是指被去选择DESELECTED的项,再指当前选择SELECTED的项)

            int          stateChange: 每一个ItemEvent对象取下面2个值中的一个:
                                                    ItemEvent.DESELECTED、ItemEvent.SELECTED

二、ItemEvent的其它方法的使用

       举例说明:设有一个comboBox,含有items: {"A", "B", "C", "D", "E"}。
假如当前亮显"B"项,现在选择"C",则会连续自动产生2个ItemEvent事件,从而连续回调itemStateChanged(ItemEvent itemEvent) 二次:第一次对应的itemEvent事件是“B is deselected”,第二次对应的itemEvent事件是“C is selected”。

      针对这2个不同的事件,ItemEvent的各个方法的作用如下表:    

itemStateChanged(ItemEvent itemEvent)中

调用下列方法

事件1:"B"被去选 deselected事件2:"C"被选中 selected解释
itemEvent.getItem()BC返回被影响的item
itemEvent.getStateChange()DESELECTEDSELECTED返回被影响的方式:去选择/选择
itemEvent.getItemSelectable().getSelectedObjects()[0]CC返回产生事件的源
itemEvent.getSource(): 从java.util.EventObject类继承的方法javax***Reminder=B]javax***Reminder=C]返回产生事件的源,但是很长

三、上述例子的源程序

GetItemSelectableDemo.java:

import java.awt.BorderLayout;
import java.awt.ItemSelectable;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;

public class GetItemSelectableDemo {
    public static void main(final String args[]) {
        final String labels[] = { "A", "B", "C", "D", "E" };
        JFrame frame = new JFrame("Selecting JComboBox");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JComboBox comboBox = new JComboBox(labels);
        frame.add(comboBox, BorderLayout.SOUTH);

        ItemListener itemListener = new ItemListener() {
            public void itemStateChanged(ItemEvent itemEvent) {
                int state = itemEvent.getStateChange();
                String stateString = ((state == ItemEvent.SELECTED) ? "Selected" : "Deselected");
                System.out.println("Item: " + itemEvent.getItem());
                System.out.println(", State: " + stateString);
                ItemSelectable is = itemEvent.getItemSelectable();
                System.out.println(", Selected: " + selectedString(is));
                System.out.println(", Source: " + itemEvent.getSource());  // 很长:Source: javax.swing***selectedItemReminder=A]
        
                /* 也可以不用上面所有的ItemEvent的方法,而用容器combox的getSelectedItem方法,但是有2条要注意:
                   1. 良好的模块化设计尽量减少模块之间的耦合,所以尽量不使用该方法以外的变量。
                   2. 上面的匿名inner class使用的外面的变量comboBox必须是final的,这样comboBox就不能动态修改或增加了。
                 */
                 System.out.println("  (Item: " + comboBox.getSelectedItem() + " selected)");
            }
        };
        comboBox.addItemListener(itemListener);
        frame.setSize(400, 200);
        frame.setVisible(true);

    }
     

    static private String selectedString(ItemSelectable is) {
          Object selected[] = is.getSelectedObjects();
          return ((selected.length == 0) ? "null" : (String)selected[0]);
     }  
}
/*   亮显B时,选择C的输出结果:
Item: B
, State: Deselected
, Selected: C
  (Item: C selected)
Item: C
, State: Selected
, Selected: C
  (Item: C selected)
 */
// 参考 src: http://www.java2s.com/Tutorials/Java/java.awt.event/ItemEvent/Java_ItemEvent_getItemSelectable_.htm

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值