1

我是 java 新手。我正在创建一个基于摇摆的 UI。我创建了 2 个框架,每个框架都在同一个包内的单独 .java 文件中。

这两个框架代表应用程序的 2 个屏幕(面板)。单击第一帧中的下一步按钮时,它应该移动到第二帧。

当我检查时,这两个类都有 main 方法,我认为这应该是创建应用程序的正确方法。应该只有一种主要方法。

单击下一步时,我试图为第一帧的主面板设置 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,并在框架的卡片布局中添加了两个面板。当我使用上面的代码更改面板时,什么都没有发生,第一个面板仍然出现。有人可以告诉我,当两个面板都已添加到 jFrame 的卡片布局中时,如何编写从一个面板移动到另一个面板的代码?

4

4 回答 4

4

使用CardLayout ,如此所示 (和一个 frame),正如其他人所提到的。

游戏视图 高分视图

单击下一步时,我试图为第一帧的主面板设置 setVisible(false),为第二帧的主面板设置 setVisible(true)。但这无法做到,因为类中的面板是私有的。上述问题有什么解决办法吗?

使面板public访问级别,它们将在其他包中可用。


该代码段中的一个问题隐含在以下行中:

UpgradeUtilityGUI upgradeUtilityGUI = new UpgradeUtilityGUI();  

它在被添加到容器之前就超出了范围。此外,在向布局中添加新卡时,它们应该不需要删除任何东西,也不需要调用repaint().

于 2012-04-07T10:22:08.120 回答
2

如果您的应用程序像只有两个面板一样简单,那么您不应该创建两个 JFrame。您应该创建一个带有两个 JPanel 的 JFrame,每个 JPanel 都包含您所需的信息。如果您已准备好使用第一个面板,则可以在其上调用 setVisible(false),并在第二帧上调用 setVisible(true)。它是最容易理解的解决方案之一。
但是,这仅取决于您是否对您有好处,或者您想使用一些更详细的解决方案。

于 2012-04-07T10:03:43.383 回答
1

您应该做的是为应用程序设置一个,然后在屏幕之间移动JFrame时添加和删除。JPanels

您的每个人JPanels基本上都应该具有以下内容... 1. AJButton称为“下一步” 2.ButtonListener每个按钮都有 A,它告诉JFrame加载 panel2、panel3 等。

作为 的一部分ButtonListener,您基本上只想调用类似JFrame.removeAll()删除现有面板的方法,然后JFrame.add(JPanel)添加下一个面板。

通过拥有 1 JFrame,您也只有 1 个main()方法。

于 2012-04-07T10:05:04.243 回答
1

不要使用两个或更多JFrames,也不要使用分离和编译Jar files,这是地狱之路,最好看看CardLayout

于 2012-04-07T10:16:38.767 回答