为什么针对JFrame的此函数执行两次?

时间:2019-07-15 08:17:01

标签: java user-interface

简介

我正在学习如何显示用于用户“友好”输入的GUI。对于那些对此感兴趣的人,我将在下面引用一些网页。

代码

public class TestGUI{

    private JFrame mainFrame;
    private JLabel headerLabel;
    private JLabel statusLabel;
    private JPanel controlPanel;

    public TestGUI()
    {
        prepareGUI();
    }

    private void prepareGUI()
    {
        mainFrame = new JFrame("TestGUI"); //Header name
        mainFrame.setSize(420, 320); //Size of the frame
        mainFrame.setLayout(new GridLayout(3, 1)); //??

       mainFrame.addWindowListener(new WindowAdapter() //Waits for an user event
       {
         //When the frame is closes, the program does too.
         @Override
         public void windowClosing(WindowEvent windowEvent)
         {
            System.exit(0); //Exit program
         }        
      });

       mainFrame.setVisible(true);//GUI is visible
    }

    public static void main(String[] args) {

        TestGUI test = new TestGUI(); //constructor
        test.prepareGUI(); //Call the method
    }

}

问题

在运行代码时,我看到弹出了两个相同的框架。我去调试它,并在调用该方法时看到它执行了两次!

为什么?

我只在主函数中用testGUI.prepareGUI();调用了一次。

用于学习Java基本GUI的页面

JavaFX

GUI Programming with AWT

4 个答案:

答案 0 :(得分:3)

您也可以在构造函数中调用prepareGUI()

public TestGUI()
{
    prepareGUI();
}

调用new TestGUI()时,此构造函数将被调用,函数也会被调用。

答案 1 :(得分:1)

您两次致电prepareGui

在这里

  public TestGUI()
    {
        prepareGUI();
    }

然后在这里

    TestGUI test = new TestGUI(); //constructor
    test.prepareGUI(); //Call the method

因此第一个块是在新的TestGUI()调用上执行的

答案 2 :(得分:1)

您两次调用prepareGui()方法。在构造函数中一个,在创建的对象中一次(在main方法中)

答案 3 :(得分:1)

问题在于您已经在调用构造函数(即TestGUI())。因此,只需省略对prepareGUI()的另一个调用,即test.prepareGUI()。