当前位置: 首页 > 知识库问答 >
问题:

ActionListener接口

聂风史
2023-03-14
public class myWindow extends JFrame implements ActionListener{

如果我有这段代码,我的类将是一个JFrame,在这里我可以在构造函数添加组件和actionlistener,如下所示

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

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

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

 public void ActionPerformed(ActionEvent ae)
         {      : 
                :
                        }

我真的很困惑。。我的书中说“侦听器对象调用事件处理程序方法,并将事件作为参数”

侦听器对象:这个

事件处理程序方法: ActionPer0005(ActionEvents ae)

辩君:我的活动是JButton b。。为什么它不是EventAction类型?如果是这样,我们为什么使用:

 ae.getActionCommand(); 

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

共有2个答案

阮桐
2023-03-14

您的JButton是一个组件,而不是一个事件。事件由组件上的某些操作生成。在本例中,当您单击按钮时,将触发一个ActionEvent,并将其传递给订阅该事件的所有侦听器。在本例中,作为ActionListener的是您的MyWindow对象

孟成文
2023-03-14

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

不,这将是实现actionsListener的类的对象。在你的情况下,它是“我的窗口”。

我的活动是JButton b。。为什么它不是EventAction类型?如果是这样,我们为什么使用:

JButton b是一个组件,而不是事件。事件描述了源状态的变化。当用户与图形用户界面交互时,事件就会生成,比如点击按钮、移动鼠标。

参考点击这里

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

事件处理涉及的步骤:-

>

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

事件对象被转发到已注册侦听器类的方法。

该方法现在被执行并返回。

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

现在你应该明白了,同一个ActionsListerner可能注册了许多按钮。现在,为了对不同的事件执行不同的操作,例如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);
        }
    }   
 类似资料:
  • 当用户与组件交互时,例如h:commandButton或h:link,JSF会触发可以通过两种方式处理的动作事件。 S.No 技术与描述 1 Method Binding 在UI Component的actionListener属性中传递托管bean方法的名称。 2 ActionListener 实现ActionListener接口并将实现类名称传递给UI Component的actionList

  • 处理ActionEvent的类应该实现此接口。该类的对象必须在组件中注册。 可以使用addActionListener()方法注册该对象。 当动作事件发生时,将调用该对象的actionPerformed方法。 接口声明 以下是java.awt.event.ActionListener接口的声明: public interface ActionListener extends EventLis

  • 处理ActionEvent的类应该实现此接口。 该类的对象必须在组件中注册。 可以使用addActionListener()方法注册该对象。 当动作事件发生时,将调用该对象的actionPerformed方法。 接口声明 (Interface Declaration) 以下是java.awt.event.ActionListener接口的声明 - public interface ActionLi

  • 问题内容: 我想知道是否可以测试是否单击了JMenu(而不是JMenuItem)。我尝试向其中添加一个ActionListener,但似乎无法识别它。我只需要它在按下JMenu按钮时执行一个操作,以便可以在打开菜单之前更改该菜单的JMenuItems。也欢迎所有取得这一结果的工作! 谢谢 问题答案: 对于使用 码 仅用于ButtonModel

  • 问题内容: 嘿,大家晚上好,我对名为“提交”的第二个按钮有问题,因为我无法将我输入的所有信息都转移到框架中的空JList中,这是我的代码,到目前为止,我的问题是如果我单击“提交”,我的所有信息都将出现在我的代码中框架中的消息区域需要列出。谢谢 问题答案: 好吧,据我所知,这将从Fields中获取信息,并将其放入您在那里的列表中 b2.addActionListener(new ActionList

  • 问题内容: JFrameWithPanel不是抽象的,并且不会重写java.awt.event.ActionListener公共类中的抽象方法actionPerformed(java.awt.event.ActionEvent)JFrameWithPanel扩展了JFrame实现ActionListener 我没有得到这个代码。Book and Java网站告诉我这是该方法的语法,但是此错误再次不