[英]trying to understand the output of this swing program that uses changeListener in Java?
我从此链接获得以下代码。 。 它使用Swing框架和一个简单的ChangeListener示例。
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class StateListener {
public static void main(String args[]) {
JFrame jFrame = new JFrame("");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button = new JButton("Press Me");
ActionListener actionListner = new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
AbstractButton absButton = (AbstractButton) event.getSource();
boolean selected = absButton.getModel().isSelected();
System.out.println("Selected=" + selected + " \n");
}
};
ChangeListener changeListner = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent event) {
AbstractButton aButton = (AbstractButton) event.getSource();
ButtonModel aModel = aButton.getModel();
boolean armed = aModel.isArmed();
boolean pressed = aModel.isPressed();
boolean selected = aModel.isSelected();
System.out.println("Armed :" + armed + " - Pressed :" + pressed + " - Selected :" + selected);
}
};
button.addActionListener(actionListner);
button.addChangeListener(changeListner);
Container cPane = jFrame.getContentPane();
cPane.add(button, BorderLayout.CENTER);
jFrame.setSize(800, 500);
jFrame.setVisible(true);
}
}
我的问题是:1)当我单击Press Me
,输出为
Armed :true - Pressed :false - Selected :false
Armed :true - Pressed :true - Selected :false
Selected=false
Armed :true - Pressed :false - Selected :false
Armed :false - Pressed :false - Selected :false
我在第61和63行只有两个对Listener
调用。
button.addActionListener(actionListner);
button.addChangeListener(changeListner);
输出应为
Selected=false
Armed :true - Pressed :false - Selected :false
但我得到4行输出,我无法理解
2)。 方法, addActionListener
和addChangeListener
是JButton
类的一部分,因为它们没有被ChangeListener或ActionListener覆盖吗?
谢谢,我是使用Swing Framework的新手。 任何帮助深表感谢。
当在按钮上收到mousePressed事件时,将执行以下代码:
if (!model.isArmed())
{
model.setArmed(true);
}
model.setPressed(true);
每次更改模型状态时,都会生成一个ChangeEvent,您将获得两个事件。
鼠标上的相同
model.setPressed(false);
model.setArmed(false);
因此,每个MouseEvent将生成多个ChangeEvent。
是JButton的方法,addActionListener和addChangeListener的一部分
阅读API文档。 它将告诉您方法在哪个类中定义。
输出应为
输出的顺序不取决于将侦听器添加到组件的顺序。 在按下并释放鼠标或按下并释放空格键之前,不会生成ActionEvent。
boolean selected = absButton.getModel().isSelected();
应该只是
boolean selected = absButton.getModel().isPressed();
唯一ChangeListener
可以发射从事件ButtonModel
和它的Mouse
和Key Events
中实现XxxButtonUI
,
isArmed();
isPressed();
isSelected();
isRollover()
ActionListener
是从mouseClicked
以及ENTER
和SPACE
键事件触发的,这些键KeyBindings
是在JButtons API中实现的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.