我是Java新手,我正在创建一个基于Swing的UI。我已经创建了2帧,每一个在单独的.java文件在同一个包。
这两个框架代表应用程序的2个屏幕(面板)。当点击第一帧中的“下一步”按钮时,它应该移动到第二帧。
当我检查时,这两个类都有main方法,我认为这应该是创建应用程序的正确方法。应该只有一个主要方法。
当单击Next时,我尝试为第一帧的主面板设置setVisible(false),为第二帧的主面板设置setVisible(true)。但这是不可能的,因为类中的面板是私有的。对于上述问题有什么解决方法吗?
作为一个初学者,有人能建议我如何开始使用这些应用程序吗?需要遵循哪些准则?请帮助我找到与启动此类应用程序开发相关的文档。
看完答案后,我的评论是:
我使用下面的代码从第一个面板转到下一个面板,但没有工作。
private void gotoNextPanel(){
// jPanelFirstScreen.setVisible(false);
JPanelSecondScreen jpanelSecondScreen= new JPanelSecondScreen();
jpanelSecondScreen.setVisible(true);
UpgradeUtilityGUI upgradeUtilityGUI = new UpgradeUtilityGUI();
upgradeUtilityGUI.removeAll();
validate();
repaint();
// upgradeUtilityGUI.add(jpanelSecondScreen);
upgradeUtilityGUI.getContentPane().add(jpanelSecondScreen, "card2");
jpanelSecondScreen.setVisible(true);
validate();
repaint();
}
我使用的是netbeans,并且在frame的cardlayout中添加了两个面板。当我使用上面的代码来改变面板时,什么也没有发生,第一个面板仍然出现。有人能告诉我,当两个面板都被添加到jFrame的cardlayout中时,如何编写从一个面板移动到另一个面板的代码?
4条答案
按热度按时间eeq64g8w1#
使用一个CardLayout,如这里所示(和其他人提到的one frame)。
当单击Next时,我尝试为第一帧的主面板设置setVisible(false),为第二帧的主面板设置setVisible(true)。但这是不可能的,因为类中的面板是私有的。对于上述问题有什么解决方法吗?
将面板设置为
public
访问级别,它们将可从其他软件包中获得。代码片段中的一个问题由行暗示:
它在被添加到容器之前就超出了范围。此外,在布局中添加新卡时,不需要删除任何内容,也不需要调用
repaint()
。pdkcd3nj2#
如果您的应用程序简单到只有两个面板,则不应创建两个JFrame。您应该创建一个带有两个JPanel的JFrame,每个JPanel都包含您需要的信息。如果你已经准备好了第一个面板,你可以在它上面调用setVisible(false),在第二帧上调用setVisible(true)。这是最容易理解的解决方案之一。
但是,这只取决于你,如果它是对你有好处,或者你想使用一些更详细的解决方案。
6tr1vspr3#
不要使用两个或两个以上的
JFrames
,也不要使用分离和编译的Jar files
,这是通往地狱的道路,最好是看看CardLayout,6yt4nkrj4#
您应该做的是为应用程序准备一个
JFrame
,然后在需要在屏幕之间移动时添加和删除JPanels
。每个
JPanels
基本上都应该有以下内容。1.一个叫做“Next”的JButton
每个按钮对应一个ButtonListener
,它告诉JFrame
加载panel2、panel3等。作为
ButtonListener
的一部分,基本上只需要调用JFrame.removeAll()
来删除现有的面板,然后调用JFrame.add(JPanel)
来添加下一个面板。有了1个
JFrame
,你也只有1个main()
方法。