Доступ к JTextArea в JScrollPane - PullRequest
       15

Доступ к JTextArea в JScrollPane

0 голосов
/ 02 декабря 2009

У меня есть JTextArea в (нескольких) JScrollPane в JTabbedPane.

Мне нужно получить доступ к JTextArea. Если бы у меня не было JScrollPane, я мог бы сделать:

JTextArea c = (JTextArea)jTabbedPane1.getComponentAt(i);

Как бы я получить его в JScrollPane?

Ура, Gazler.

Ответы [ 3 ]

5 голосов
/ 02 декабря 2009

Звучит так, будто вы попадаете в кучу ссылок там (по крайней мере, так было со мной в прошлом).

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

Таким образом, вместо добавления компонентов и потери ссылок (или, что еще хуже, дублирования ссылок повсюду), вы можете использовать этот объект, который будет иметь ссылку:

class AppMediator {
     private JTextArea area;
     private JTabbetPane pane;

     // etc. 

     public void doSomethingWithText() {
          this.area.getText(); // etc 
     }
 }

См. Шаблон проектирования Mediator . Цель состоит в том, чтобы переместить все объекты «представления» из того места, где они находятся (обычно в виде ссылок в подклассах), к общему промежуточному объекту.

2 голосов
/ 02 декабря 2009

Эта строка выглядит сложной, но я ДУМАЮ это сделает это.

JTextArea c = (JTextArea) (((JViewportView) (((JScrollPane) jTabbedPane1.getComponentAt(i)).getViewport()))).getView();

Но я думаю, что было бы более интересно хранить ваши TextArea в ArrayList.
Так что вы можете сделать это:

List<JTextArea> listAreas = new ArrayList<JTextArea>();

...
JTextArea c = listAreas.get(i);

Создать новый можно примерно так:

JTextArea c = new JTextArea();
jTabbedPane1.addTab("Title", new JScrollPane(c));
listAreas.add(c);

Надеюсь, это поможет.

1 голос
/ 04 декабря 2009

Я предпочитаю подход AppMediator, но вы также можете сделать

scrollPane.getViewport().getView()
...