在Swing项目中,我使用了JFrame
并将其分为三个部分: 菜单窗格 , 上下文窗格 ,以及 状态窗格 。
状态窗格在执行操作时向用户显示其操作是否成功,以及用户可能想要了解的其他信息。例如,如果用户单击上下文菜单中的删除按钮,状态面板将指示操作是否成功完成。
状态面板的问题是它需要在一段时间后更新其状态。例如,如果用户单击另一个按钮或浏览上下文窗格中的其他页面,则状态窗格不应仍显示上次删除操作的结果。
有两种解决方法,我可以想到:
JPanels
,JTextFields
和...)添加鼠标或键盘操作侦听器,以便他们调用状态面板以清除状态,鼠标或键盘。虽然实现第一个选项相对简单,但还不够。我想我需要两者的结合。但问题是,如果我想将这些动作侦听器添加到所有组件,那将是一种非常脏的方法。也许我可以把它添加到主框架。我做了(代码在下面给出),但是如果鼠标在框架自己的面板上移动(例如,不在上下文窗格中),则只能起作用
你有什么建议吗?
JFrame.this.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent me) {
}
@Override
public void mouseMoved(MouseEvent me) {
Config.statusPanel.clearStatus();
}
});
答案 0 :(得分:2)
不,使用MouseListener是有点疯狂,你自己说这是一个肮脏的解决方案。相反,我认为使用PropertyChangeListener监听类的状态(很可能是Model类,而不是视图类)会更好。
例如,用户按下JButton(视图类中的一个组件),控件类对此按钮的响应做出反应,并告诉模型更改其状态。然后,状态窗格的PropertyChangeListener将响应模型的状态更改并更新其自己的视图。这是解决这个问题的最干净的OOP方法。
为了使其运行良好,您的程序应基于模型 - 视图 - 控制器模式的一种变体,但无论如何它应该这样做。