Вопрос

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

Я сделал первую часть, используя DocumentListener и поместил соответствующий код в его insertUpdate метод

Я не использовал ActionS раньше, но я слышал, что они полезны для ситуаций, когда вам нужно что -то, чтобы вызвать несколько элементов управления. Можно ли запустить действие из DocumentListener? Хорошей идеей использовать действия вообще, или я должен просто поместить свой код обычным методом?

(в конструкторе):

    textAreaInput.getDocument().addDocumentListener(new DocumentListener() {
        public void insertUpdate(DocumentEvent e) {
            // do something
        }
        public void removeUpdate(DocumentEvent e) {}
        public void changedUpdate(DocumentEvent e) {}
    });

и действие, которое является поле:

Action doSomething = new AbstractAction("Do Something!") {
    @Override
    public void actionPerformed(ActionEvent e) {
        // do it
    }
};

разъяснение:

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

Это было полезно?

Решение

Вы можете вызвать actionPerformed() метод, будь то в Action или нет. Есть пример здесь.

Другие советы

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

Это не имеет смысла для меня.

Почему нажатие кнопки вызывает то же действие, что и пользователь, вводя текст в текстовую область?

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

Это утверждение предназначено для элементов управления, которые пользователь нажимает, например, Jmenuitems, Jbuttons или нажатие Enter в текстовом поле. В целом они могут быть использованы при использовании ActionListner.

DocumentListener не является ActionListener, поэтому, как я говорил ранее, использование действия не кажется уместным.

Я думаю, что вам нужно уточнить ваше требование.

Изменить, основываясь на разъяснениях

Если пользователь изменит эти другие значения, он может захотеть повторно отправить текст

Почему у пользователя есть выбор? Если вы измените шрифт, текст, передний план, фон текстовой области, компонент, который он автоматически перекрашивает, вам не нужно просить об этом. Если вы посмотрите на код этих методов, они всегда в конечном итоге вызывает методы revalidate () и Repaint ().

Расположение зависит от других значений, установленных в других местах в графическом интерфейсе;

Похоже, вам нужен пользовательский класс. Может быть, ParsedTextarea или Parseddocument. Этот класс будет содержать «свойства», которые могут быть установлены в другом месте в графическом интерфейсе. Это будет способствовать документу. Это также поддержит ваш метод "parsetheText". Поэтому всякий раз, когда изменяется свойство или создается документ, вы автоматически вызываете метод «parsetheText». Таким образом, вам не нужна отдельная кнопка, и компонент всегда будет синхронизироваться, потому что анализ автоматического.

Я думаю, что вам не нужно создавать объект действия. Можете добавить ActionListener к кнопке так же, как вы добавили DocumentListener в документ ввода. Если я правильно пойму вашу проблему, возможно, вы должны сделать что -то вроде этого:

textInput.getDocument().addDocumentListener(new DocumentListener(){             
    @Override
    public void insertUpdate(DocumentEvent e) {
        doIt();
    }               
    @Override
    public void removeUpdate(DocumentEvent e) {}                
    @Override
    public void changedUpdate(DocumentEvent e) {}
});

button.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        doIt();
    }
});

doIt() это метод, в котором вы будете делать то, что хотели.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top