Журнал Java ==> JTextArea

Потребность: Произведите JAVA-приложение, входят в компонент графического интерфейса пользователя, такой как JTextArea.

Беспокойство: Должен зарегистрировать вещи от любого класса, статическим способом. Однако компонент регистратора GUI не должен быть статичным (очевидно), поскольку это - член родительского компонента.

Что мне делать?

5
задан asmo 2 June 2010 в 13:07
поделиться

3 ответа

Создайте поставщика журнала singleton и добавьте к нему «текстовое поле» в качестве слушателя.

Пример синглтона регистратора:

interface Listener {
    void log(String log);
}

enum Logger {

    instance;

    private List<Listener> listeners = new LinkedList<Listener>();

    public void addListener(Listener l) {
    synchronized(listeners) {
        listeners.add(l);
     }
    }

    public void log(String log) {
        synchronized(listeners) {
            for(Listener l : listeners)
                l.log(log);
        }
    }
}

Добавьте свой слушатель (который вам нужно будет реализовать самостоятельно) следующим образом:

Logger.instance.addListener(myTextField);

И используйте его (из любого класса) следующим образом:

Logger.instance.log("Hello World!");

Или вы можете использовать пакет например log4j .

2
ответ дан 14 December 2019 в 13:27
поделиться

Записаться в файл, чтобы компонент следовал за концом файла. Вы, вероятно, захотите использовать ведение журнала XML log4j, если хотите поместить вывод в сетку.

Обновление: Вы также можете реализовать циклический регистратор в памяти.

2
ответ дан 14 December 2019 в 13:27
поделиться

Мне приходит в голову привязка данных. Вам нужна модель , представляющая ваш журнал, и эта модель привязана к компоненту графического интерфейса. Распространенной структурой привязки данных для SWT является привязка данных JFace, я уверен, что для SWING существует нечто похожее.

Как бы это работало - регистратор добавляет сообщения в модель, возможно, просто Arraylist of Strings (logentries). Классы привязки данных слушают модель и обновляют графический интерфейс каждый раз при изменении модели. Это будет работать и в обратном направлении (изменения в графическом интерфейсе могут быть отправлены в модель), но вам просто нужно одно направление.

1
ответ дан 14 December 2019 в 13:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: