如何从外部调用GUI元素。
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
gui = new NewJFrame().setVisible(true);
}
});
gui.textarea.something;
}
答案 0 :(得分:0)
我也认为这是一个XY问题。但是,要回答您提出的狭隘问题,请再次调用invokeLater()
。我想也许问题可能只是需要存储变量gui
以供日后使用。简单的答案是你只是将它存储为正常,但绝不能从除EDT之外的任何地方访问它。
public class MyApp {
// Never access except from the EDT
private static Object gui;
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
gui = new NewJFrame().setVisible(true);
}
});
// ... time passes ...
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
gui.textarea.something;
}
} );
}
}
重新。你的评论:
如果你问的是模块,你可能正在寻找某种形式的依赖注入。一种方法是创建一个特殊的holder对象来保存应用程序的上下文信息。有很多方法可以做到这一点。这是一个简单的开始。更好的方法可能是使用更多,更小的上下文对象来引用应用程序的较小部分。
public static void main(String args[]) throws Exception {
GuiContext guic = new GuiContext();
java.awt.EventQueue.invokeAndWait(new Runnable() {
final GuiContext guiCtx = guic;
public void run() {
gui = new NewJFrame().setVisible(true);
guiCtx.setMainFrame( gui );
}
});
MyModule mod = new MyModule( guic );
mod.startMessage();
}
public class MyModule {
private GuiContext gui;
public MyModule( GuiContext gui ) { this.gui = gui; }
public void startMessage() {
gui.setMessage( "hello" );
}
}
public class GuiContext {
private Window gui;
public setGui( Window gui ) { this.gui = gui; }
public setMessage( final String message ) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
gui.add( message );
}
} );
}
}