Java GUI 设计建议

3
我正在使用Swing框架编写我的第一个Java GUI应用程序。我使用JTextField、JPasswordField和JButton类编写了一个基本的登录系统。现在,我正在为按钮编写actionPerformed方法,我想在不再需要这些组件时将它们删除,但我不确定最好的实现方式。
我考虑过使用这些组件的setVisible方法,似乎可以工作,但我确信这不是首选的方法。如果这是一个有点愚蠢的问题,对不起。

你说的“移除它们”是什么意思?你是在动态更改你唯一的屏幕吗? - akarnokd
是的,无论如何这就是我想要的...只是有点困惑,因为没有参考实际包含组件的JFrame。 - mportiz08
你在使用GUI编辑器来制作你的应用程序,还是手动编写它?你能给我们展示一些代码示例吗?在JFrame中总是有this - akarnokd
5个回答

5

将登录对话框与主窗口分离。当您完成登录后,只需隐藏登录对话框即可。

您还可以将文本字段和按钮保存到类字段中,稍后使用remove(Component)为每个字段和按钮调用。


建议是使用setVisible还是删除? - Liran Orevi
我倾向于分离。我的登录通常是弹出式模态对话框。我很少需要更改jpanel的内容 - 这会导致布局管理方面的麻烦。 - akarnokd
3
如果您使用对话框(JDialog),通常在使用完后应该调用dispose()方法来关闭它。 - kdgregory

1
通常情况下,您可能希望能够用一行代码来完成此操作。因此,您应该考虑将您想要显示或隐藏的不同内容包装在JPanel中。然后,您可以动态地显示或隐藏JPanels。

1
如果您更改JFrame的内容,则会隐式地重新绘制(repaint())。 - akarnokd

1

你可以创建一个登录的JPanel,设置并显示它,一旦用户密码验证通过,你就可以展示应用程序的JPanel。这可以很容易地使用CardLayout完成。

它将容器中的每个组件视为一张卡片。一次只有一张卡片可见,容器则充当卡片的堆栈。

这里有一个教程

使用CardLayout,你的代码可能如下所示:

实例变量:

static final String LOGINPANEL = "LOGINPANEL";
static final String MAINPANEL = "MAINPANEL";
JPanel cards;

你的面板在哪里被创建:

JPanel loginPanel = new JPanel();
//add your stuff to the login panel
JPanel mainPanel = new JPanel();  
//add your stuff to the main panel

cards = new JPanel(new CardLayout());
cards.add(loginPanel, LOGINPANEL); 
cards.add(mainPanel, MAINPANEL);

然后当您的密码验证通过时,在AWT线程中,您可以执行以下操作:

CardLayout cl = (CardLayout)(cards.getLayout());
cl.show(cards, MAINPANEL);

0

我同意JPanel的建议。将登录组件添加到JPanel中,然后一旦登录成功就隐藏该JPanel。


一旦用户成功登录,隐藏登录面板。 - Chung Pow
这与上面提到的JDialog的逻辑相同...为登录设置一个单独的JPanel,然后在用户成功登录后隐藏它。 - Chung Pow
我认为这样更方便用户,因为屏幕上没有单独的窗口打开。希望这个修订能够有所帮助! - Chung Pow

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接