【问题标题】:MVC Event System with Dynamic GUI具有动态 GUI 的 MVC 事件系统
【发布时间】:2013-11-13 17:08:24
【问题描述】:

我正在使用 swing 开发一个 gui 系统,并且我正在尝试遵循模型-视图-控制器模型。在实现我的事件系统时,我有点困惑,以便在 gui 上发生事情时视图可以与控制器通信。

我的 gui 是动态的,因此我有一个包含其他 JPanel 的侧面板。其中一个碰巧是一个 LoginPanel,当有人尝试登录时它会抛出一个 LoginEvent。因为我希望我的 SidePanel 是动态的,所以 SidePanel 不知道 LoginPanel 的存在,它只是在绘制它被告知要绘制的内容。

当我启动程序时,模型和视图是分开启动的,并且控制器会获得模型和视图的实例。

使用 MVC 系统,当 LoginPanel 在我的 gui 上是动态的并且不始终存在时,我如何告诉 LoginPanel 控制器(实现 LoginEventListener)想要监听它?

【问题讨论】:

  • 嗯,你的问题是?
  • 使用Strings 作为密码也是不好的做法:stackoverflow.com/questions/8881291/…
  • @home 我的视图有一个侧面板,侧面板有一个登录面板。 LoginPanel 存储 LoginListeners,并在有人尝试登录时将事件发送给这些侦听器。我希望侧面板是动态的,因此它不应该知道 LoginPanel 存在,那么如果 >View 不一定知道 LoginPanel 存在?可能我只是对 MVC 系统的思考有误,但看来我所做的确实有缺陷。

标签: java swing events model-view-controller


【解决方案1】:

存在和可见之间是有区别的。只需让您的LoginPanel 始终存在,但使用setVisible 隐藏和显示它。这将是最简单的解决方案。

【讨论】:

  • 当您将组件设置为可见/不可见时,布局管理器是否会自动更新?例如,如果我对某事使用流布局并隐藏一个组件,其他组件是否会适应该组件不可见? (抱歉,我现在在手机上,无法测试)
  • 您可能需要致电revalidatevalidate 或其他方式。当我使用 Swing 时,如果我没记错的话,Javadocs 中并没有很好地记录它,但那是在 StackOverflow.com 存在之前 - 你现在应该可以毫不费力地找出它是如何工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多