我使用IntelliJ的GUI构建器创建了一个表单,它有一个工作main()
方法,表单正常工作并附加了一些监听器。
除此之外,我还有一个自定义类,我想调用我使用IntelliJ的GUI构建器创建的GUI。我可以通过在GUI的类中的“main”方法中复制代码并将其放在我的自定义类中来完成此操作,如果我运行自定义类,则确实会显示该表单。
但这就是我可以用创建的GUI做的所有事情,我只能称之为。我不能做其他事情,比如处理GUI表单实例(frame.dispose()
)并打开另一个表单,因为我不知道如何从我的自定义类访问框架实例。
有人可以帮助我吗?我认为如果我使用GUI构建器而不是从头开始为几种形式编写GUI代码,这将节省我很多时间。
答案 0 :(得分:0)
首先,为根面板命名:
然后为它创建一个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();
}