从另一个函数内部显示Java GUI标签

时间:2011-03-13 08:25:33

标签: java user-interface

阅读代码中的评论......

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之外的地方显示标签。我知道有一个明显的答案,我无法想到它。

感谢您的帮助。

3 个答案:

答案 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