如何创建和处理使用IntelliJ的GUI构建器创建的表单

时间:2018-04-09 20:35:39

标签: java swing intellij-idea gui-builder

我使用IntelliJ的GUI构建器创建了一个表单,它有一个工作main()方法,表单正常工作并附加了一些监听器。

除此之外,我还有一个自定义类,我想调用我使用IntelliJ的GUI构建器创建的GUI。我可以通过在GUI的类中的“main”方法中复制代码并将其放在我的自定义类中来完成此操作,如果我运行自定义类,则确实会显示该表单。

但这就是我可以用创建的GUI做的所有事情,我只能称之为。我不能做其他事情,比如处理GUI表单实例(frame.dispose())并打开另一个表单,因为我不知道如何从我的自定义类访问框架实例。

有人可以帮助我吗?我认为如果我使用GUI构建器而不是从头开始为几种形式编写GUI代码,这将节省我很多时间。

2 个答案:

答案 0 :(得分:0)

首先,为根面板命名:

image

然后为它创建一个getter,您可以在JFrame by

中使用它
JFrame f = new JFrame();
f.add(new YourGuiClass().getMainPanel());
f.setVisible(true);

如果要处置它,请处置JFrame实例应该正常工作。

修改

你说你想在GUI表单类逻辑中dispose JFrame,试试这个:

class YourGuiClass {
    private JFrame f = new JFrame();
    private JPanel mainPanel;

    public void load() {
       f.add(mainPanel);
       f.setVisible(true);
    }

    public void dispose() {
       f.dispose();
    }
}

通过这个,您可以在不知道主函数中与Swing相关的任何内容的情况下操作GUI表单类:

public static void main(String... args) {
   YourGuiClass myGuiClass = new YourGuiClass();
   myGuiClass.load(); // it now shows itself
   if (someLogic()) myGuiClass.dispose(); // you can
   // also call this elsewhere as you like
}

答案 1 :(得分:0)

我通过在名为load()的GUI表单类中创建一个包含JFrame设置

的方法来解决问题

GUI表单类

public void load()
{
    JFrame frame = new JFrame( "Login Form" );
    frame.setContentPane( new LoginForm().mainPanel );
    frame.setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE );
    frame.pack();
    frame.setLocationRelativeTo( null );
    frame.setVisible( true );
}

然后在我的主要课程中,我用new LoginForm().load();调用它。

为了处理初始GUI表单并打开另一个表单,我在 GUI表单类中创建了一个名为getMainFrame()的辅助方法

private JFrame getMainFrame()
{
    return (JFrame) SwingUtilities.getWindowAncestor( this.mainPanel );
}

之后在GUI表单类构造函数中,有条件满足条件时处理框架的逻辑

if (age.equals("42"))
{
    //load the appropriate form
    new MainForm().load();

    //dispose of this current form
    this.getMainFrame().dispose();
}