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

时间:2017-10-06 13:44:25

标签: 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 the user
}

我的问题是这个方法也是在初始加载方法中调用的。 在该方法中,会弹出一条警告消息。 只有当用户更改组合框的选定值时才需要。(当我在加载方法中设置代码值时,不需要。)

是否有办法(标志,不同的方法)区分这些行动并仅在需要时发出警告信息?

2 个答案:

答案 0 :(得分:1)

  

我的问题是这个方法也是在初始加载方法中调用的。

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

答案 1 :(得分:0)

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

第二个是识别触发事件的组件。检查这种情况的一种方法是获取事件的来源并检查它是否与实际对象匹配,或者您可以检查它是否是'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..
}