【问题标题】:Access Java JFrame from another class从另一个类访问 Java JFrame
【发布时间】:2015-03-19 16:17:21
【问题描述】:

我有一个创建 JFrame 的类。创建 JFrame 时,它​​有一个开始按钮。单击开始按钮时,它会运行两个线程,直到单击停止按钮。这两个线程在另一个类文件中。从包含线程的类中,如何访问 JFrame 实例以更改显示的值?

【问题讨论】:

  • 你有一些可以发布的代码吗?变量范围将有助于解决这个问题。

标签: java swing methods concurrency jframe


【解决方案1】:

为了实现这一点,您必须使用 this 关键字传递 JFrame 的引用。

【讨论】:

    【解决方案2】:

    要访问另一个类中的私有实例,我认为您应该使用agetter。 示例:

    //JFrame declaration
    private JFrame frame;
    //Getter
    public JFrame getFrame() {
        return frame;
    }
    

    【讨论】:

      【解决方案3】:

      正如一个答案所指出的,您可以将 GUI 的引用或视图传递给任何需要它的类,例如通过将 GUI 类传递给另一个类的构造函数参数,并使用该参数设置一个字段,但话虽如此,但有一些警告:

      • 始终确保在 Swing 事件线程(EDT)上进行 Swing 状态更改。由于您使用的是后台线程,这意味着您将
        • 使用 SwingWorker 作为后台线程,并通过发布/处理方法对通知 GUI 更改,或者
        • 您的 SwingWorker 可以通过 PropertyChangeListeners 和“绑定”属性通知观察者更改,或者
        • 如果使用标准 Thread/Runnable,您需要确保使用 SwingUtilities.invokeLater(someRunnable) 将 Swing 调用排队到 EDT
      • 最好使用 Model-View-Control 类型的结构,但即使这样做,也应在 EDT 上更改模型,原因与上述相同。
      • 作为一般建议,我尽量避免创建扩展 JFrame 的类,因为这会不必要地限制我的代码仅创建 JFrame。

      请注意,此帮助非常笼统,但如果您需要更具体的帮助,则需要发布有关您的问题和相关代码的更具体信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-12
        • 2014-05-25
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-11
        相关资源
        最近更新 更多