Отображение метки графического интерфейса Java из другой функции - PullRequest
1 голос
/ 13 марта 2011

Читать комментарии в коде ...

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()
}

- Если вы не поняли комментарии -

Я хочу отобразить метку снаружи, где я создал графический интерфейс. Я знаю, что есть очевидный ответ на это, я просто не могу думать об этом.

Спасибо за помощь.

Ответы [ 3 ]

3 голосов
/ 13 марта 2011

Вы должны предоставить некоторый контекст коду, который хочет добавить метку, например:

public static void main1(GUI gui, String string)
{
}

... в противном случае невозможно узнать, к какому окну вы хотите добавить метку.

Вы могли бы потенциально использовать статическую переменную для хранения "единственного окна, которое было создано", но я бы посоветовал против этого - глобальное состояние затрудняет рассуждение о коде.

1 голос
/ 13 марта 2011

Чтобы получить слабую связь между вашими компонентами (которые в вашем случае являются графическим интерфейсом и «основным кодом»), вы можете использовать идею, известную как «Опубликовать / Рассказать» или Шаблон наблюдателя .Таким образом, вы можете легко изменить весь графический интерфейс без изменения основного кода.Вы получите лучшую инкапсуляцию отдельных аспектов вашего кода ( отображение результатов для пользователя и вычисление их), и вы особенно сможете решить свою текущую проблему.

Простой пример кода:

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();
    }

}
0 голосов
/ 13 марта 2011

Ответом будет удаление квалификатора static из вашего метода main1. Конечно, я предполагаю, что add(labelThatIWantToShow); не является реальным кодом; вам придется использовать правильный код для любого набора инструментов GUI, который вы используете.

Другой способ - если по какой-то причине вы не можете избавиться от static - это сделать то, что предложил Джон, и передать аргумент main1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...