【发布时间】:2020-05-29 07:52:54
【问题描述】:
我希望能够从另一个类更改一些 JLabel 对象的内容。我有一个包含所有 GUI 对象(JFrame、JPanel 等)的 GUI 类。假设我只有一个JLabel:
public class GUI {
private JLabel label;
public GUI() {
initialize();//initializes all objects
}
public void update(String s) {
this.label.setText(s);
}
}
GUI 有一个公共函数update(String),我希望从另一个类调用它。
我的主班叫App:
public class App {
private static GUI window;
public static void main( String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
window = new GUI();
App.updateTxt("some string");
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public static void updateTxt(String s) {
window.update(s);
}
}
此解决方案不起作用,但是,GUI.update(String) 在GUI 类中调用时可以正常工作。
我检查了保罗提出的解决方案:
Access GUI components from another class 但我不明白。
那么如何从另一个类调用 GUI 上的方法来更改 UI?
【问题讨论】:
-
请提供minimal reproducible example,以便我们更容易理解您的问题。此处发布的代码既没有提供有关如何构建 GUI 的信息,也没有提供有关如何调用方法
updateTxt的信息。 -
感谢您的回复 Janus,我们的想法是从任何类调用 App.updateTxt(),因为 App 是保存窗口(GUI 的实例)的位置。假设我们在 GUI 实例化之后调用 App.updateTxt("some string") => 结果:不幸的是,窗口中没有任何变化
-
Swing 组件有 repaint()、revalidate() 和 doLayout() 方法。其中一个应该能够重新绘制你想要的任何部分。但是,doLayout 不是您应该负责的,这是布局引擎的责任。