добавить текстовую область в Java из другого файла Java

1

Это мой FrameGUI

public FrameGUI(String title) {
        super(title);
        setLayout(new BorderLayout());

        final JTextArea textArea = new JTextArea();  //  *****
        detailsPanel = new DetailsPanel();
        Container c = getContentPane();
        c.add(textArea, BorderLayout.CENTER);
        c.add(detailsPanel, BorderLayout.NORTH);
    }

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

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

Теги:
textarea
user-interface
swing
jtextarea

1 ответ

1
Лучший ответ

Ваш вопрос не зависит от Swing или GUI, но является частью более общего Java-вопроса:

Как объект одного класса может изменить состояние поля объекта другого класса?

Один из способов сделать это - с помощью методов setter. Например, вы можете дать классу, который содержит JTextArea публичный метод, который даст другим классам возможность сделать это.

Например,

// assuming the class holds a descriptionArea 
// JTextArea field
public void appendToDescriptionArea(String text) {
  descriptionArea.append(text);
}

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


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


редактировать
Относительно этой ошибки:

"textArea не может быть разрешено"

И этот код:

public FrameGUI(String title) {
  super(title);
  setLayout(new BorderLayout());

  final JTextArea textArea = new JTextArea();  //  *****
  detailsPanel = new DetailsPanel();
  Container c = getContentPane();
  c.add(textArea, BorderLayout.CENTER);
  c.add(detailsPanel, BorderLayout.NORTH);
}

Ваша проблема заключается в том, что вы объявляете переменную textArea внутри конструктора FrameGUI, и при этом видимость переменной или "область" ограничивается только этим конструктором. Вне конструктора он не существует и не может быть использован.

Решение состоит в том, чтобы объявить переменную textArea вне конструктора, чтобы сделать его полем класса. например,:

public class FrameGUI extends JFrame { // I'm not a fan of extending JFrames.
    // this variable is now visible throughout the class    
    private JTextArea textArea = new JTextArea(15, 40); // 15 rows, 40 columns

    public FrameGUI(String title) {
      super(title);
      setLayout(new BorderLayout());

      // final JTextArea textArea = new JTextArea();  //  *** commented out
      detailsPanel = new DetailsPanel();

      Container c = getContentPane();
      c.add(new JScrollPane(textArea), BorderLayout.CENTER); // put textarea into a scrollpane
      c.add(detailsPanel, BorderLayout.NORTH);
    }

    public void appendToTextArea(String text) {
      textArea.append(text);
    }
  • 0
    я попытался добавить приведенный выше код в мой файл, но теперь я получаю "textArea не может быть решена"
  • 0
    @Kal: тогда вам нужно будет опубликовать соответствующий код в исходном вопросе, в том числе как и где вы объявляете JTextArea, метод, который вы используете, чтобы другие классы могли добавлять текст, как вы получаете ссылку в класс, который содержит JTextArea в вашем втором классе, и как вы пытаетесь вызвать вышеупомянутый метод. Также публикуйте все сообщения об ошибках и исключениях. Эта дополнительная информация поможет нам лучше понять вашу проблему. Удача!
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню