JCheckbox-ActionListener和ItemListener?

问题描述 投票:59回答:5

ActionListener和ItemListener均用于通过JCheckBox触发事件?

所以,它们之间有什么区别,在这种情况下,其中一个优先于另一个?

ActionListener和ItemListener均用于通过JCheckBox触发事件?那么,它们之间有什么区别,在这种情况下,其中一个比另一个更受青睐?

java swing actionlistener jcheckbox itemlistener
5个回答
57
投票

ItemListenerActionListener都相同,如果JCheckBox具有相同的行为。但是,主要区别是可以通过调用复选框上的ItemListener来触发setSelected(true)。作为编码实践,请勿同时将ItemListenerActionListener都注册到JCheckBox,以避免不一致。


25
投票

不同之处在于,对ActionEvent执行操作时会触发JCheckBox,其状态是通过使用鼠标,空格键或助记符单击来更改其状态。无论是否选择JCheckBox,它都不会really


20
投票

供参考,这里是ButtonGroup,说明了区别。控制台:


3
投票

我为JButton使用import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JPanel; /** @see http://stackoverflow.com/q/9882845/230513 */ public class Listeners { private void display() { JFrame f = new JFrame("Listeners"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JCheckBox b = new JCheckBox("JCheckBox"); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println(e.getID() == ActionEvent.ACTION_PERFORMED ? "ACTION_PERFORMED" : e.getID()); } }); b.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { System.out.println(e.getStateChange() == ItemEvent.SELECTED ? "SELECTED" : "DESELECTED"); } }); JPanel p = new JPanel(); p.add(b); f.add(p); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new Listeners().display(); } }); } } ,而addActionListener对于addItemListener更方便。在后一种情况下,我与JToggleButton一起添加了每当JToggleButton被选中/未选中时的事件。


1
投票

我一直在自己进行测试,并查看了这篇文章中的所有答案,但我认为他们回答的问题不是很好。为了获得一个好的答案,我进行了实验(下面的代码)。当单选按钮或复选框中的状态发生更改时,您可以100%的时间同时使用ActionListener和ItemListener触发任何一个事件,或者我假定的其他任何类型的Swing项目(因为它是Object类型)都将其触发。我可以告诉这两个侦听器的唯一区别是,随侦听器返回的事件对象的类型不同。并且您可以通过使用ItemListener而不是ActionListener的复选框获得更好的事件类型。

© www.soinside.com 2019 - 2024. All rights reserved.