Java swing设计:静态与实例

Java swing设计:静态与实例,java,swing,Java,Swing,我设计了一个html文档编辑器,我想在解决其中的设计问题时得到一些帮助。问题如下: 文档编辑器由一个曲面(JFrame)和一个菜单栏组成。在surface内部,我有三个面板——工具面板、文本面板和状态面板(都是JPanel的扩展)。文本面板具有自定义文本窗格(JTextPane的扩展)。现在的问题是,在很多场景中,工具面板上的菜单和小部件项需要访问JTextPane的底层文档模型。例如,为了实现列表/段落拖动功能,标尺需要知道插入符号在文档模型中的位置,以便我可以标记需要增加其左侧插入的段落 我

我设计了一个html文档编辑器,我想在解决其中的设计问题时得到一些帮助。问题如下:

文档编辑器由一个曲面(JFrame)和一个菜单栏组成。在surface内部,我有三个面板——工具面板、文本面板和状态面板(都是JPanel的扩展)。文本面板具有自定义文本窗格(JTextPane的扩展)。现在的问题是,在很多场景中,工具面板上的菜单和小部件项需要访问JTextPane的底层文档模型。例如,为了实现列表/段落拖动功能,标尺需要知道插入符号在文档模型中的位置,以便我可以标记需要增加其左侧插入的段落

我现在组织设计的方式是-surface是一个单例,因此要访问JTextPane中的html文档模型,您需要通过以下迷宫进行编码-

给我曲面->转到文本面板->转到文本窗格->转到文本窗格的文档

另一种方法是将文本窗格中的文档引用设置为静态,以便可以直接访问

TextPane.getTextDocument()

另外,我正在使用的文本窗格中的html文档目前还没有自定义。因此,我只是使用文本窗格返回的默认HTMLDocument。虽然将来我可能不得不用一个更定制的HTMLDocument扩展来代替它(例如,实现cusom标记)


我有点像一个设计新手。一些设计大师能对此有所启发吗?

我想如果你得到10个答案,你就会得到11个答案。:-)

首先,不需要单身。在这种情况下,这只是一种使用全局变量作弊的方式。当您想要打开两个或三个文本文档时会发生什么

您的菜单是否可以随时访问工具面板?由于toolpanel是textpanel的同级,并且处于1-1关系(我认为?),toolpanel了解textdocument(有链接)和一个方便的方法getTextDocument()有点“合理”。您的小部件了解其直接父项工具面板似乎是合理的

这将是我处理问题的方式——对象之间的链接“有意义”。您需要尽可能少的耦合,但有些地方确实需要耦合。也许我误解了你的问题,或者你的想法与我大不相同,在这种情况下,你应该换一种方式。此外,您正在对您的代码将来可能如何发展进行最佳猜测。祝你好运!:-)

任何解决方案都面临一个大问题——文本文档是否会更改?(例如,是否有文件->新建菜单或文件->打开菜单?)。如果是这样,那就需要加以考虑。在我的建议中,JFrame在文件->打开中创建文本文档,然后在工具栏中更改指向它的链接

p、 请添加合适的模型和控制器!我刚才谈到了图形组件,以使事情更简单

p、 p.s.“超前思考”的合理增强示例

  • 这能同时处理多个JFrames打开吗?对
  • 这是否可以处理单个JFrame,但有多个文档(例如,文本文档的选项卡式界面)?几乎。该方法必须稍微聪明一点,才能知道许多文档中哪些是活动的,但您可以很容易地想象这样做
  • 当我需要保存更多关于dicument的信息时,比如名称(所以Save提供了一个很好的默认值),上次保存的时间,是不是“脏”,是HTML还是XHTML或者其他什么。。。此时,您可能需要再添加一个模型层。但是你可以想象,再加上一层间接(一个链接)就可以了。所以这取决于你离实现#3的距离有多近,你想如何设计

  • 好的,如果我得到一个答案,我会接受它,我可以保证(只要答案不会取笑这个问题,或嘲笑我的无知)。@user396089谢谢你的接受。希望我的回答能帮你找到正确的方向。谢谢。答案非常有用,给了我思考设计的新方法。