gpt4 book ai didi

java - 如何组织具有多个屏幕/面板的基于 MVC 的程序的 Controller ?

转载 作者:行者123 更新时间:2023-11-30 09:58:51 25 4
gpt4 key购买 nike

我目前正在从事一个用 Java 编写的业余爱好项目,其中包含大约两个不同的 JFrames,每个 JFrame 大约有 3-4 个 JPanel。我面临的问题是我不太确定如何处理与我的 Controller 和不同 View 类的交互。

例如,我在 Java App. design with MVC 上有一篇 Sun 的文章,他们列出了让模型和 View 之间的所有通信作为最现代的 Controller 通过 Controller 的选项,我也被教导过这种策略并且应该做得很好。但是,它并没有深入到解释如何处理所有元素和不同面板所涉及的所有 ActionListener。

到目前为止,我学到的“方法”是使用一个 Controller 并通过 getter 将 ActionListener 设置为各种对象并跟踪 Activity 面板。我那本很棒的 Java 书给出的另一种选择是只坚持每个 View 类的内部类。任何一种方法似乎都会产生非常糟糕的代码,而我更喜欢一个或多个 Controller 尽可能少的膨胀。

我的问题当然是;您如何在保持 Controller 可用的同时尽可能整齐高效地分配 ActionListener?

最佳答案

尽管 Markus 的解决方案仍然是我迄今为止看到的最简洁的解决方案,但我还是做了一些细微的改动,希望这些改动在原作者眼中也是改进 ;)。

如果您添加/删除列表中的一个项目以响应某个事件,则有可能以同时对列表进行更改而告终;事件已处理,但如果在捕获事件的事件之后有更多项目,循环将继续。

因此需要使用稍微不同的方法。我决定使用 ListIterator.add() 方法,因为该方法支持在遍历列表项时修改列表。可能有更优雅的解决方案可用,但这个解决方案做得相当不错。

万一对别人有帮助;修改后的代码类似于以下内容:

ListIterator<ActionListener> iterator = mActionListeners.listIterator();

public void actionPerformed(ActionEvent e)
{
iterator = mActionListeners.listIterator();
while (iterator.hasNext())
{
ActionListener actionListener = (ActionListener)iterator.next();
actionListener.actionPerformed(e);
}
}

public void addListener(ActionListener listener)
{
iterator.add(listener);
}

public void removeListener(ActionListener listener)
{
iterator.remove(listener);
}

如果有更好的解决方案或改进,我也很乐意听到。

关于java - 如何组织具有多个屏幕/面板的基于 MVC 的程序的 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/416760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com