Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从另一个函数内部显示Java GUI标签_Java_User Interface - Fatal编程技术网

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

从另一个函数内部显示Java GUI标签,java,user-interface,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 strin

阅读代码中的注释

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的外部显示一个标签。我知道有一个明显的答案,我就是想不出来


谢谢您的帮助。

您必须为要添加标签的代码提供一些上下文,例如:

public static void main1(GUI gui, String string)
{
}
。。。否则,无法知道要将标签添加到哪个窗口


您可能会使用一个静态变量来保存“已创建的单个窗口”,但我建议不要这样做-全局状态使代码难以推理。

您必须为要添加标签的代码提供一些上下文,例如:

public static void main1(GUI gui, String string)
{
}
。。。否则,无法知道要将标签添加到哪个窗口


您可能会使用静态变量来保存“已创建的单个窗口”,但我建议不要这样做-全局状态使代码难以推理。

答案是从
main1
方法中删除
static
限定符。当然,我假设
add(labelThatIWantToShow)不是实际代码;无论使用哪个GUI工具包,都必须使用正确的代码


另一种方法——如果你因为某种原因不能摆脱
static
,那就按照Jon的建议去做,并把一个参数传递给
main1
,答案就是从
main1
方法中删除
static
限定符。当然,我假设
add(labelThatIWantToShow)不是实际代码;无论使用哪个GUI工具包,都必须使用正确的代码

另一种方法——如果你因为某种原因不能摆脱
静态的
,你可以按照Jon的建议,把一个参数传递给
main1
,以便在你的组件(在你的例子中是GUI和“主代码”)之间取得联系,你可以利用被称为“发布/订阅”或。这样,您可以轻松地更改整个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();
    }

}
为了在您的组件(在您的案例中是GUI和“主代码”)之间取得联系,您可以使用被称为“发布/订阅”或“发布/订阅”的思想。这样,您可以轻松地更改整个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();
    }

}

谢谢,但是我不能删除静态限定符。谢谢,但是我不能删除静态限定符。