Java 事件侦听器的控制流

Java 事件侦听器的控制流,java,swing,event-listener,Java,Swing,Event Listener,我在尝试JAVA swing,它可以帮助创建GUI应用程序。因此,我有一个名为MainFrame.JAVA的类,它类似于控制器类。 在bar.java中,当调用“actionPerformed”事件并将控件传输到MainFrame.java时,将调用方法tb.setStringListener。我无法理解仅仅通过实现一个接口,是如何能够转移控制的? 界面在这里的重要性是什么?请帮忙,谢谢 代码: Main.java /* * To change this license header, cho

我在尝试JAVA swing,它可以帮助创建GUI应用程序。因此,我有一个名为MainFrame.JAVA的类,它类似于控制器类。 在bar.java中,当调用“actionPerformed”事件并将控件传输到MainFrame.java时,将调用方法tb.setStringListener。我无法理解仅仅通过实现一个接口,是如何能够转移控制的? 界面在这里的重要性是什么?请帮忙,谢谢

代码:

Main.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Pavan-Kumar
 */
public class Main {

    public static void main(String[] args) {

        MainFrame f = new MainFrame();

    }

}
MainFrame.java

public class MainFrame  {

    bars t ;
    public MainFrame() {
          t = new bars();
          t.setStringListener(new StringListener() {

              @Override
              public void acceptString(String t) {

                  System.out.println( t + " Hey I am inside tbe MainFrame");
                  //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
              }


          });


    }
StringListener.java

    public interface StringListener {
    public void acceptString(String t);
}
java

    public class bars {
    private StringListener sl;


     void setStringListener(StringListener l) {
        this.sl = l;   
        actionPerformed();
        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

     public void actionPerformed( ) {

         sl.acceptString("Hey .....!");

     }

}
字符串“Hey…!”如何传递到MainFrame.java
输出:嘿。。。!嘿,我在大型机内部

控制权不会因为您实现了接口而转移。控制权转移是因为您这样做了

    hb.addActionListener(this);
    bye.addActionListener(this);

实现接口只是告诉编译器该类是
ActionListener
的实现,并且您可以在需要
ActionListener
的任何地方使用该类的实例。单击Swing按钮时,它们有一个列表
ActionListener
s,它们将遍历并调用每个按钮的
actionPerformed
方法。剩下的就是通过调用
addActionListener
给按钮
ActionListener
s。界面的美妙之处在于按钮不知道或不关心
ActionListener
实际上是什么;它只需要知道它是一个
ActionListener
,并且它有一个
actionPerformed
方法。

接口所做的就是定义一个“契约”。它声明实现接口的任何类都可以执行接口定义的指定操作。这还意味着
工具栏
不关心接口的“如何”实现,任何实现接口的类都可以向
工具栏
注册兴趣,以便在控件进入方法时收到通知:@Override public void actionPerformed(ActionEvent e){String clicked=e.getActionCommand();JButton c=(JButton)e.getSource();//System.out.println(单击);if(c==hb&&sl!=null){{……{System.out.println(“在工具栏内”);sl.acceptString(“…”);在此之前,我可以可视化,此后控件将转到大型机:@Override public void acceptString(String text){System.out.println(“大型机内部”);panel.appendText(text);我无法理解这一点。它有一个StringListener接口的功能。大型机应该传递一个接口实例,就这样,好吗?你能解释一下吗?