【问题标题】:Swing - get main window class instance from button classSwing - 从按钮类获取主窗口类实例
【发布时间】:2012-03-15 22:33:04
【问题描述】:

单击特定按钮后,我需要在面板类中运行一个方法(我们称之为SampleMethod)。由于面板被添加到主窗口类实例中的某种列表中,我只是将其公开,并希望在按钮的mouseClicked 事件中访问它。 那么,如何获取主窗口实例,以便获取该面板列表、获取特定面板并使用此实例运行SampleMethod

【问题讨论】:

  • 是否要确定父级,在本例中为 JFrame/JDialog/JWindow ???
  • 嗯,实际上是的。不过,我在那个项目中找到了一个 ComponentFactory 类,它完成了所有的脏活。我会回答这个问题,因为我完全理解它。
  • 一次创建所有 JFrame/JDialog/JWindow,将其重新用于其他操作
  • 我们称它为 SampleMethod - 不,它是 sampleMethod :-) 请学习 java 命名约定并遵守它们
  • @kleopatra 我觉得这是可以原谅的,因为这不是生产应用程序。我是一名 C# 程序员,我对这项任务的架构挑战更感兴趣,而不是语言约定之间的一些愚蠢差异。

标签: java swing awt mouseevent


【解决方案1】:

您可能会将Action 视为公开所需功能的一种方式。常见的用途是让按钮和菜单共享同一个处理程序,但一个Action 可以转发一个事件到另一个,如here 所示的按钮和击键。

【讨论】:

    【解决方案2】:
    【解决方案3】:

    由于面板被添加到主窗口类中的某种列表中 实例...

    主窗口类实例?您的主窗口似乎只有一个实例,可以扩展 JFrameJPanelJDialog 等。无论如何,您可以在应用程序中使用 Singleton 设计模式来获取和使用代码中任何位置的相同实例(在您的情况下为相同的主实例)。在单例模式中,我们应用该模式的类的构造函数是private,所以你不能创建它的实例。然而,这个类也有它的单个静态实例,可以通过 getter 方法引用并在您的代码中使用。看看网络上的 Singleton 示例,您将能够拨打类似的电话

    YourJFrame.getInstance().getPanels(10).sampleMethod();

    在您的嵌套类和方法中,在您的情况下为mouseClicked()

    【讨论】:

      【解决方案4】:

      什么垃圾神说的。请改用 ActionListener 类和按钮 addActionListener(),因为您只需要知道按钮是否被按下。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-06
        • 1970-01-01
        相关资源
        最近更新 更多