Java 如何在JComboBox中区分setSelectedItem调用和actionPerformed方法

Java 如何在JComboBox中区分setSelectedItem调用和actionPerformed方法,java,swing,combobox,jcombobox,Java,Swing,Combobox,Jcombobox,我有一个在JComboBox中发生值更改时调用的方法 public void actionPerformed( ActionEvent e ) { Object source = e.getSource(); if( source.equals( listComboBox ) ) { changeList(); } } public void changeList() { //do some stuff ..... ..... //warn t

我有一个在JComboBox中发生值更改时调用的方法

public void actionPerformed( ActionEvent e )
{
    Object source = e.getSource();
    if( source.equals( listComboBox ) )
    {
        changeList();
    }
}


public void changeList()
{ //do some stuff
.....
.....
//warn the user
}
我的问题是,在初始加载方法中也会调用此方法。 方法中会弹出一条警告消息。 这仅在用户更改组合框的选定值时才需要。(在加载方法的代码中设置值时不需要。)


是否有一种方法(标记,不同的方法)来区分这些操作并仅在需要时发出警告消息?

您有两种选择。第一种方法是对每个组件应用一个唯一的侦听器,并以不同的方式处理事件(在大多数情况下,我更喜欢这种方法,因为它可以使每个组件的代码保持简单,并且更好地阅读)

第二个是确定触发事件的组件。一种检查方法是获取事件源并检查它是否与实际对象匹配,或者只需检查它是否为“instanceof”JComboBox,然后根据需要处理事件

if(sourceObject == myComboBox ){ 
    // handle the event 
}

我的问题是,在初始加载方法中也会调用此方法

因此,在加载完成后,将侦听器添加到组合框中。

可能重复的
if(sourceObject instanceof JComboBox{
   // then we are dealing with a combobox
   // if it's the only one then you know what to do..
}