从另一个类访问Java JFrame

时间:2015-03-19 16:17:21

标签: java swing methods concurrency jframe

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

如一个答案所述,您可以将GUI或视图的引用传递到任何需要它的类,例如将GUI类传递到其他类的构造函数参数,并使用参数来设置一个字段,但话虽如此,有一些警告:

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

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