事件监听器的控制流程

时间:2018-06-17 07:49:56

标签: java swing event-listener

我正在尝试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);
}

bars.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 .....!");

     }

}

字符串如何“嘿......!”传递给MainFrame.java 输出:嘿......!嘿,我在MainFrame中

1 个答案:

答案 0 :(得分:0)

仅仅因为您实现了界面而未传输控件。控制权是专门转移的,因为你这样做了。

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

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