как обновить текстовое поле из статического класса? - PullRequest
0 голосов
/ 17 июля 2010

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

Вот унифицированная точка входа для передачи данных, где ими можно манипулировать.

public class Log {

    private static void consoleOut(String data) {
    System.out.println(data);
    OBD2nerConsole.update(data);
    }
      public static void level0(String data) {
    if (Status.ConsoleLevel >= 0) {
    consoleOut(data);

    }

Это моя форма, в ней есть текстовое поле и несколько кнопок.

public class OBD2nerConsole extends java.awt.Frame {

    public static void update(String data) {
        textField1.setText(textField1.getText() + data);
    }   

}

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

Я должен добавить, что это моя первая форма когда-либо!

Ответы [ 2 ]

3 голосов
/ 17 июля 2010

Если предположить, что textField1 является атрибутом родительского класса, метод update не должен быть static.Это, конечно, означает, что вам нужно применить метод к экземпляру объекта ODB2tunerConsole.

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

Это приводит людейкто новичок в объектно-ориентированном программировании на Java, чтобы попытаться сделать все статичным.Но, как видите, это приводит к неприятностям.Правильное решение - ограничить использование статики теми случаями, когда они действительно необходимы.Это следующие:

  • Общие константы;например, public static final String FOO = "foo";
  • Вспомогательные методы, которые зависят только от состояния их аргументов.
  • Скрытые ссылки на глобальные структуры данных, предоставляемые (при необходимости) с использованием шаблона "singleton".
1 голос
/ 17 июля 2010

Если вы дадите Log статическую ссылку на экземпляр OBD2nerConsole и удалите static из update (String) , вы должны бытьвозможность обновления textField1 .

Список измененных Log.java:

public class Log {
    private static Updatable console = Updatables.getUpdatable();

    private static void consoleOut(String data) {
        System.out.println(data);
        console.update(data);
    }

    public static void level0(String data) {
        if (Status.ConsoleLevel >= 0) {
            consoleOut(data);
        }
    }
}

Список Updatable.java:

public interface Updatable {
    void update(String);
}

Списокмодифицированного фрагмента ODB2nerConsole.java:

public class OBD2nerConsole extends java.awt.Frame implements Updatable {
    @Override
    public void update(String data) {
        textField1.setText(textField1.getText() + data);
    }
}

Список Updatables.java:

public class Updatables {
    public Updatable getUpdatable() {
        return new ODB2nerConsole();
    }
}
...