gpt4 book ai didi

java - Action 监听器接口(interface)

转载 作者:行者123 更新时间:2023-12-01 09:01:20 25 4
gpt4 key购买 nike

public class myWindow extends JFrame implements ActionListener{

如果我有这段代码,我的类将是一个 JFrame,我可以在其中添加组件并在构造函数中向它们添加 Action 监听器,如下所示

public MyWindow()
{
JButton b = new Jbutton("button");
b.addActionListener(this);
}

这个关键字将用作匿名 Action 监听器对象(这是我的类),对吗?

稍后我将使用标题覆盖 actionPerformed 方法:-

 public void ActionPerformed(ActionEvent ae)
{ :
:
}

我在这里真的有一个很大的困惑..我的书说“监听器对象以事件作为参数调用事件处理程序方法”

监听器对象:this

事件处理方法:ActionPerformed(ActionEvent ae)

参数:我的事件是 JButton b .. 为什么它不是 EventAction 类型?如果是这样,我们为什么要使用:

 ae.getActionCommand(); 

我认为这是一个告诉哪个组件触发了事件的方法,为什么当组件作为参数传递时我们需要它?

最佳答案

这个关键字将用作匿名 Action 监听器对象(这是我的类),对吧?

不,这将是实现 actionsListener 的类的对象。在您的情况下,它是“MyWindow”。

我的事件是 JButton b ..为什么它不是 EventAction 类型?如果是这样,我们为什么要使用:

JButton b 是一个组件而不是一个事件。事件描述源状态的变化。当用户与 GUI 交互时,会生成事件,例如单击按钮、移动鼠标​​。

引用Click here

事件处理是一种控制事件并决定事件发生时应该发生什么的机制。

事件处理涉及的步骤:-

  1. 用户单击按钮并生成事件。

  2. 现在,相关事件类的对象将自动创建,并且有关源和事件的信息将填充在同一对象中。

  3. 事件对象被转发到注册监听器类的方法。

  4. 该方法现已执行并返回。

我认为这是一个告诉哪个组件触发事件的方法,为什么当组件作为参数传递时我们需要它?

现在您应该已经明白,可以有许多按钮注册到同一个 ActionsListerner。现在要针对不同的事件执行不同的操作,e.getActionCommand() 很方便,它会告诉您哪个按钮是触发事件的源。希望这会有所帮助。

我试图为您提供一个简单的 JButton 程序示例。

    import javax.swing.*;       
import java.awt.*;
import java.awt.event.*;

public class ButtonSwing {
private int numClicks = 0;

public Component createComponents() {
//Method for creating the GUI componenets
final JLabel label = new JLabel("Clicks: " + "0"); //final so that i can access inside inner class
JButton button = new JButton("Simple Button");
button.addActionListener(
//inner class for ActionListener. This is how generally it is done.
new ActionListener() {
public void actionPerformed(ActionEvent e) {
numClicks++;
label.setText("Clicks: " + numClicks);
System.out.println(e.getActionCommand());
System.out.println(e.getModifiers());
System.out.println(e.paramString());
}
}
);
JPanel pane = new JPanel(); //using JPanel as conatiner first.
pane.setLayout(new FlowLayout());
pane.add(button); // adding button to the JPanel.
pane.add(label); // adding label to the JPanel.
return pane;
}

public static void main(String[] args) {
JFrame frame = new JFrame("SwingApplication");
ButtonSwing obj = new ButtonSwing();
Component contents = obj.createComponents();
frame.getContentPane().add(contents);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.pack(); //It will cause the window to be sized to fit the preferred size
//and layouts of its subcomponents.
frame.setVisible(true);
}
}

关于java - Action 监听器接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41643746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com