问题描述
java中ComboBox的ItemStateChanged事件是在item有变化时触发,同时也包括在初始化(addItem)数据时触发。请问有没有哪位大牛知道怎样判断ComboBox仅在鼠标按下改变item时触发?
解决方案
解决方案二:
搬运了一下,http://bbs.csdn.net/topics/310017621
解决方案三:
谢谢你。我试过了,还是不行。ItemStateChanged会在addItem时触发。我只需要在鼠标点击时才触发,addItem时不触发。
解决方案四:
我觉得1楼应该能解决你的问题了,只要在发生事件时加个判断就可以了importjava.awt.*;importjava.awt.event.*;importjava.util.Random;importjavax.swing.*;publicclassone{publicstaticvoidmain(Stringargs[]){JFramejf=newJFrame();finalJComboBox<Integer>jbo=newJComboBox<>();jbo.addItem(newInteger(1));jbo.addItemListener(newItemListener(){publicvoiditemStateChanged(ItemEvente){//某项被选择时,触发业务逻辑if(e.getStateChange()==ItemEvent.SELECTED){System.out.println("某项被选择");}}});JButtonjb=newJButton("添加项");jb.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){//每次单击都会使JComboBox添加项,但是不会触发选择逻辑inti=newRandom().nextInt(100);System.out.println(i);jbo.addItem(newInteger(i));}});jf.add(jbo,BorderLayout.NORTH);jf.add(jb,BorderLayout.CENTER);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.pack();jf.setVisible(true);}}
解决方案五:
当一个值改变时会同时触发DESELECTED先再SELECTED后。因此我们或许能通过判断,如果当前只发生了SELECTED而没有DESELECTED可能就是刚添加的瞬间呢。不太可能itemStateChange事件的DESELECTED/SELECTED运行在两个不同的线程中吧?