在Swing项目时,我使用了一个JFrame
,把它分成三个部分:菜单窗格,一个情景窗格和状态窗格。添加监听到的JFrame和所有子
状态窗格在执行操作时向用户显示其操作是否成功,以及用户可能想知道的其他信息。例如,如果用户单击上下文菜单中的删除按钮,状态面板将指示操作是否成功完成。
状态面板的问题在于它需要稍后更新其状态。例如,如果用户单击另一个按钮或浏览上下文窗格中的其他页面,则状态窗格不应该仍显示上次删除操作的结果。
这有两种解决方法,我能想到的:
- 明确几秒钟后的状态。
- 向所有组件(
JPanels
,JTextFields
,...)添加鼠标或键盘动作侦听器,以便在来自鼠标或键盘的活动时它们调用状态面板来清除状态。
尽管实施第一个选项相对简单,但还不够。我想我需要两者的结合。然而,问题在于,如果我想将这些动作侦听器添加到所有组件,它将是一个非常肮脏的方法。也许我可以将它添加到主框架。我做了(代码在下面给出),但是如果只在鼠标在框架自己的面板上移动时才起作用(例如,不在上下文窗格上)
您有什么建议吗?
JFrame.this.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent me) {
}
@Override
public void mouseMoved(MouseEvent me) {
Config.statusPanel.clearStatus();
}
});
或者,您的模型可以将更改推送给某个状态管理器,而不是侦听模型上的更改,然后更新UI中的状态。但基本原则仍然相同 – Robin
@Robin:只要模型不必担心知道任何视图的任何内容,就可以拉或推数据。 –