我很难在不使用选项卡面板的情况下为用户创建不同的屏幕。在Netbeans中,我创建了Swing Frame,并且在用户登录后如何刷新页面以使登录屏幕内容被替换为不同的屏幕或JPanel或JTabbedPanel?我应该在GUI包中创建主要Swing框架,然后创建其他一些Swing框架,然后根据用户的动作显示不同内容的主要Swing框架可以使用来自其他Swing框架的框架或面板?摆动框架来更改内容
回答
这里的一个可能的解决方案:
使用多发性类延伸的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]:
动作侦听器事件处理代码中所定义的相同的JPanel已经执行了操作,对吗?我假设如果在已添加到主框架的JPanel上执行操作,主框架中的操作侦听器不会涉及,对不对?我是否应该在主框架中为不同阶段声明方法,以便在其中一个JPanel中执行操作后,其事件处理代码将通知主框架中的方法,请求移除我,也许向方法参数发送附加信息已采取何种行动执行,所以主框架可以决定应该添加哪个JPanel? – mat2
@ mat2事件处理可以发生在任何你希望发生的地方。问题是它应该去哪里。如果这是一个长期项目,我强烈建议Martin Fowler的网站作为学习GUI架构的开始。调试所节省的时间将是值得花时间学习的:https://martinfowler.com/eaaDev/uiArchs.html –
- 1. WinRT C# - 从子框架中更改主框架的内容
- 2. 作为框架更改的iFrame内容的动态缩放
- 3. 摆动可见框架
- 4. bxSlider框架比内容更宽
- 5. java swing更新框架中的内容
- 6. 动态更改ListView内容
- 7. 动态更改URL内容
- 8. 更改内容动态
- 9. qtip2动态更改内容
- 10. 动态更改ToolTipDialog内容
- 11. Javascript更新来自框架的父级内容
- 12. 更改按钮单击框架布局的内容
- 13. 的PHP框架更容易启动
- 14. 使用图像,而不是JDialog /框架来摆动组件?
- 15. 更改UITextView框架
- 16. 更改内容
- 17. 更改内容
- 18. 动态改变数据库的数据而不改变框架的摆动
- 19. 使用UIView更改框架来旋转UIImageView动画更改它的尺寸
- 20. Drupal - 需要更改框内容
- 21. 更改对话框中的内容
- 22. 动态更改UIScrollView的框架?
- 23. 动态更改iframe /框架的名称
- 24. CALayer动画与框架更改?
- 25. 在不改变内容大小的情况下更改UIWebView框架
- 26. 端口更改后不加载phpMyAdmin的框架内容,改变了PmaAbsoluteUri
- 27. 选择内部框架内的内容
- 28. 更改内容后刷新框的内容
- 29. 更改来自URL的输入更改的div内容(WHOIS)
- 30. 动态地更改来自外部源的弹出内容
[如何使用CardLayout](http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html) – MadProgrammer