javaoop策略

javaoop策略,java,swing,oop,Java,Swing,Oop,我有一个项目叫做可视化数据结构。我有一个像这样的面向对象设计 Class VisualDataStructures extends JFrame Class ControlPanel extends JPanel Class CodePanel extends JPanel VisualDataStructures类具有main。此类具有类ControlPanel和CodePanel的实例 类控制面板在JMenuBar中具有名为Load的JMenuItem 类CodePanel有一个JText

我有一个项目叫做可视化数据结构。我有一个像这样的面向对象设计

Class VisualDataStructures extends JFrame
Class ControlPanel extends JPanel
Class CodePanel extends JPanel
VisualDataStructures类具有main。此类具有类ControlPanel和CodePanel的实例

类控制面板在JMenuBar中具有名为Load的JMenuItem

类CodePanel有一个JTextArea

问题: 我需要在类控制面板中为名为load的JMenuItem设置一个actionlistener。单击加载时,用户将输入文件的目录,然后文件将被加载并显示在CodePanel的JTextArea

我是否需要将从VisualDataStructures实例化的object CodePanel传递给ControlPanel,以便使用该对象,然后修改JTextArea的值


有人知道更好的方法吗?谢谢。

在没有看到实际代码的情况下回答这个问题有点困难,但我仍会尝试。也许,如果你能通过Github、Bitbucket,作为一个要点或在一个粘贴箱中,以某种方式分享你的代码,我可以给出一个更好的答案。因此,在CodeReview stackexchange上执行此操作可能比在StackOverflow上执行此操作更好

总的来说,我觉得GUI父类的扩展太多有点可疑。扩展使用可能有点反模式。首先,它可能会在小型应用程序中生成看似简单的代码,但从长远来看,它往往会混淆源代码,因为它鼓励业务逻辑和UI的混合。扩展是OOP的核心,这是一种误解。不是。多态抽象是为了解耦和反转键依赖关系,这是OOP的核心。除此之外,扩展只是一个又好又方便的好东西,它被过度使用了

说到这里,您可能听说过MVC-Model视图控制器。这是UI保持事物独立的典型模式

您不希望对加载操作做出反应的ActionListener直接知道CodePanel,因为这样的依赖关系太具体了。您希望在两者之间有一个抽象,比如一个接口,并引用该接口而不是CodePanel

当涉及到ActionListener和类似的接口时,如果您还没有升级到Java8,您可能会感兴趣。像ActionListener这样只有一个抽象方法的接口是隐式函数接口,这意味着您可以使用lambda或方法引用

总的来说,我认为它有助于人们始终牢记以下问题:如果我用另一个UI工具包替换UI工具包会怎么样?即使这不是一个用例,也永远不会发生,为了回答这个问题而进行的关注点解耦和分离会导致更模块化、更好的设计,更易于理解和维护。最后,问题是如果我用一个不同的UI工具包替换UI工具包会怎么样?导致设计遵循更多的坚实原则


在Swing中处理ActionListener时,您可能希望查看接口动作和抽象类AbstractAction。它们提供了非常有趣的功能。以正确的方式使用,它们可以大大简化代码。

查找MVC模式-您的应用程序有一个绑定到UI元素的模型,因此您可以更改模型,模型将更改传播到UI。我也考虑过这一点。我真的不知道这是不是更好的方法。但我会努力的。谢谢。@PaulJabines一般来说没有更好的方法。谷歌MVVM,MVP,MV?还有:哪种方法最适合不同于用例的用例我不知道MVVM MVP和MV。我会用谷歌搜索它。谢谢。你比我跑得快;。你所说的也是我在UI开发上的选择。我回复得很晚,回答得很好。感谢您提供的OOP设计技巧。