2017-03-12 39 views
0

我很难在不使用选项卡面板的情况下为用户创建不同的屏幕。在Netbeans中,我创建了Swing Frame,并且在用户登录后如何刷新页面以使登录屏幕内容被替换为不同的屏幕或JPanel或JTabbedPanel?我应该在GUI包中创建主要Swing框架,然后创建其他一些Swing框架,然后根据用户的动作显示不同内容的主要Swing框架可以使用来自其他Swing框架的框架或面板?摆动框架来更改内容

+1

[如何使用CardLayout](http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html) – MadProgrammer

回答

0

这里的一个可能的解决方案:

  • 使用多发性类延伸的JPanel其中每个表示应用程序的一个特定的“相位”。所以,如果你有一个登陆界面和主菜单,例如,把这些给两个独立的类:

    公共类LoginPanel扩展JPanel 公共类MainScreen扩展JPanel

  • 将其添加到JFrame中,通话[setContentPane(Container contentPane)]。在这种情况下,它将是:frame.setContentPane(new LoginPanel)

  • 验证用户凭证后,使用新的MainScreen实例在框架上调用setContentPane()。从的javadoc注释:

如果更换,建议您与 有不透明的JComponent替换它的内容窗格。

此外,要将JFrame设置为内容窗格的首选大小,请在添加新内容后调用frame.pack()。

随着您不同JPanel的数量的增长,可能会更容易将“持有者”JPanel作为JFrame内容窗格而不包含任何属性,然后您可以仅删除/添加此内容。通过这种方式,您可以在JFrame上保留贯穿应用程序生命周期的常量组件,例如JMenuBar,而无需担心每次都将其添加到JFrame中。

[1]:

+0

动作侦听器事件处理代码中所定义的相同的JPanel已经执行了操作,对吗?我假设如果在已添加到主框架的JPanel上执行操作,主框架中的操作侦听器不会涉及,对不对?我是否应该在主框架中为不同阶段声明方法,以便在其中一个JPanel中执行操作后,其事件处理代码将通知主框架中的方法,请求移除我,也许向方法参数发送附加信息已采取何种行动执行,所以主框架可以决定应该添加哪个JPanel? – mat2

+0

@ mat2事件处理可以发生在任何你希望发生的地方。问题是它应该去哪里。如果这是一个长期项目,我强烈建议Martin Fowler的网站作为学习GUI架构的开始。调试所节省的时间将是值得花时间学习的:https://martinfowler.com/eaaDev/uiArchs.html –