阅读代码中的评论......
public GUI() {
// make the GUI
}
private class theHandler implements ActionListener {
public void actionPerformed(ActionEvent event) {
// if they clicked a button then do main1
}
}
public static void main1(String string) throws IOException {
// random code
add(labelThatIWantToShow); // I want to display the label I created in GUI()
}
- 如果您不理解评论 -
我想在创建GUI之外的地方显示标签。我知道有一个明显的答案,我无法想到它。
感谢您的帮助。
答案 0 :(得分:3)
您必须为想要添加标签的代码提供一些上下文,例如:
public static void main1(GUI gui, String string)
{
}
...否则无法知道要将标签添加到哪个窗口。
你可以潜在地使用一个静态变量来保存“已创建的单个窗口”,但我建议不要这样做 - 全局状态使得很难推断出代码。
答案 1 :(得分:1)
为了在你的组件之间获得low coupling(在你的情况下是GUI和“主要代码”)你可以利用这个被称为“发布/删除”的想法或{{3 }}。这样,您可以轻松更改整个GUI而无需更改主代码。您可以更好地封装代码的单个方面(向用户显示结果并计算它们),您将特别能够解决当前问题。
简单示例代码:
import java.util.Observable;
import java.util.Observer;
public class GUIExample implements Observer {
private String state = "foo";
public GUIExample() {
System.out.println("GUI created");
}
@Override
public void update(Observable o, Object arg) {
this.state = "bar";
System.out.println("GUI updated: " + state);
}
}
你的主要代码:
import java.util.Observable;
public class MainCode extends Observable {
// you could call doStuff() if some certain action was performed
public void doStuff() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
setChanged();
notifyObservers();
}
public static void main(String[] args) {
MainCode mc = new MainCode();
mc.addObserver(new GUIExample());
mc.doStuff();
}
}
答案 2 :(得分:0)
答案是从static
方法中移除main1
限定词。当然,我假设add(labelThatIWantToShow);
不是实际代码;你将不得不使用正确的代码来使用你正在使用的GUI工具包。
另一种方式 - 如果由于某些原因你无法摆脱static
- 将会做Jon建议并将参数传递给main1
。