Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检测哪个组合框状态已更改?_Java_Swing_Jcombobox_Itemlistener - Fatal编程技术网

Java 如何检测哪个组合框状态已更改?

Java 如何检测哪个组合框状态已更改?,java,swing,jcombobox,itemlistener,Java,Swing,Jcombobox,Itemlistener,我在表单中有两个JComboBox,我在其中添加了一个ItemListener,我应该覆盖itemStateChanged(),现在我想说,如果第一个JComboBox选中的项目做了什么,如果第二个JComboBox选中的项目做了其他事情,我不知道怎么做?也许代码可以帮助你 public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==ItemEvent.SELECTED) picture.setIcon(pics[b

我在表单中有两个
JComboBox
,我在其中添加了一个
ItemListener
,我应该覆盖
itemStateChanged()
,现在我想说,如果第一个
JComboBox
选中的项目做了什么,如果第二个
JComboBox
选中的项目做了其他事情,我不知道怎么做?也许代码可以帮助你

public void itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED)
   picture.setIcon(pics[box.getSelectedIndex()]);
}        

在第二行代码中,我不知道如何识别哪个
JComboBox
状态已更改。

有两种方法可以做到这一点,第一种方法是检查事件对象上的源并查看它与哪个组合框匹配


另一种方法是在每个组合框中添加不同的侦听器,这样您就知道进入一个侦听器的任何调用都来自相应的控件。这是匿名内部类的一个很好的用途。

有两种方法可以做到这一点,第一种是检查事件对象上的源,并查看它与哪个组合框匹配

另一种方法是在每个组合框中添加不同的侦听器,这样您就知道进入一个侦听器的任何调用都来自相应的控件。这是匿名内部类的一个很好的用法。

您可以使用

例如:

public void itemStateChanged(ItemEvent e) {

if(e.getSource() instanceof JComboBox){
  JComboBox combo = (JComboBox) e.getSource();
  //rest of code
}
现在,对于与
combo2
不同的
combo1
,您有两个选项,您可以像这样设置组件的名称

combo1.setName("combo1");
combo2.setName("combo2");
在itemListener中

if(e.getSource() instanceof JComboBox){
  JComboBox combo = (JComboBox) e.getSource();

   if("combo1".equals(combo.getName())){
        // your code
   }
    .
    .// rest of code
}
或者,如果您知道它们是同一个实例,那么您可以始终使用
==

   if(combo1 == e.getSource() ){
        // your code
   }else if (combo2 == e.getSource()){
        //code for combo 2
   }
你可以用

例如:

public void itemStateChanged(ItemEvent e) {

if(e.getSource() instanceof JComboBox){
  JComboBox combo = (JComboBox) e.getSource();
  //rest of code
}
现在,对于与
combo2
不同的
combo1
,您有两个选项,您可以像这样设置组件的名称

combo1.setName("combo1");
combo2.setName("combo2");
在itemListener中

if(e.getSource() instanceof JComboBox){
  JComboBox combo = (JComboBox) e.getSource();

   if("combo1".equals(combo.getName())){
        // your code
   }
    .
    .// rest of code
}
或者,如果您知道它们是同一个实例,那么您可以始终使用
==

   if(combo1 == e.getSource() ){
        // your code
   }else if (combo2 == e.getSource()){
        //code for combo 2
   }

e.getSource()
可能会帮助您:D
e.getSource()
可能会帮助您:D值得注意的是,即使是标准的
ActionEvent
也有一个
.getSource()
方法。此外,事件的最佳实践是在方法签名中将它们设置为
final
。值得注意的是,即使是标准的
ActionEvent
也有一个
.getSource()
方法。此外,事件的最佳实践是在方法签名中使它们成为
final