TU_*_*KAI 57 java swing actionlistener jcheckbox itemlistener
ActionListener和ItemListener都用于使用JCheckBox触发事件?
那么,它们之间有什么区别呢?在这种情况下,其中一个比另一个更受欢迎?
小智 55
两者ItemListener以及ActionListener在JCheckBox具有相同行为的情况下.但是,ItemListener通过调用setSelected(true)复选框可以触发主要区别.作为编码的做法不登记都ItemListener以及ActionListener与JCheckBox以避免不一致.
Jav*_*cal 24
不同的是,ActionEvent当在执行该操作被触发JCheckBox即它的状态是通过点击鼠标或用空格键或记忆改变无论是.无论是选择还是取消选择,它都不会真正听取更改事件JCheckBox.
例如,如果JCheckBox c1(说)添加到a ButtonGroup.改变的其他国家JCheckBoxes在ButtonGroup不触发一个ActionEvent对其他JCheckBox,而不是ItemEvent被解雇.
最后的话:一种ItemEvent即使当用户通过选择另一个取消选择复选框被触发JCheckBox(在一个时ButtonGroup),然而ActionEvent不是那样的产生,而不是ActionEvent只监听的动作是否在执行JCheckBox(向其中ActionListener仅注册)或没有.它不知道ButtonGroup和所有其他选择/取消选择的东西.
tra*_*god 20
作为参考,这是一个说明差异的sscce.安慰:
SELECTED ACTION_PERFORMED DESELECTED ACTION_PERFORMED
码:
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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101021 次 |
| 最近记录: |