Java 获取激发itemStateChanged的对象类型

Java 获取激发itemStateChanged的对象类型,java,swing,Java,Swing,我想知道如何检查触发itemStateChanged的对象 假设我有一个复选框和一个下拉列表。两者都连接到同一个itemStateChanged。在这里,我想首先决定更改了什么对象,然后根据对象执行代码 我该怎么做?我在想: public void itemStateChanged(ItemEvent e) { if(e.getSource() == JComboBox) { // Do code } if(e.getSource() == JDropDo

我想知道如何检查触发itemStateChanged的对象

假设我有一个复选框和一个下拉列表。两者都连接到同一个itemStateChanged。在这里,我想首先决定更改了什么对象,然后根据对象执行代码

我该怎么做?我在想:

public void itemStateChanged(ItemEvent e) {
    if(e.getSource() == JComboBox) {
        // Do code
    }
    if(e.getSource() == JDropDown) {
        // Some other code
    }
}

但这显然不起作用,因为JDropDown和JCheckBox是对象,而不是变量。

如果您希望在GUI中对所有JCheckBox执行相同的操作,对所有JDropDown元素执行相同的操作,可以使用以下代码:

if (e.getSource() instanceof JCheckBox) {
    // Do code
}
else if (e.getSource() instanceof JDropDown) {
    // Some other code
}
如果您只想对GUI的特定元素执行特定操作,则需要保留这些元素的实例,例如作为类的成员,并根据每个元素检查源代码:

if (e.getSource() == checkbox1) {
    // Do code
}
else if (e.getSource() == checkbox2) {
    // do other code
}
else if (e.getSource() == dropDown1) {
    // Some other code
}
...

您可以检查您创建的这些类的实例,您可以使用
instanceof
,或者尝试类型转换事件源。除非有一个名为JCheckBox的字段和一个名为JDropDown的字段,否则该代码不会编译。使用引用复选框和下拉列表的实际字段名,您将得到您的解决方案。更好的方法是使用两个不同的侦听器。
但这显然不起作用,因为JDropDown和JCheckBox是对象
——而JDropDown不是组件。提问时使用真实的组件名称,以避免混淆。@camickr这不是故意的。大多数时候我都会把它们混在一起。