Pregunta

Tengo un JTextArea en (múltiple) JScrollPane en un JTabbedPane.

necesito para acceder al JTextArea. Si no tuviera la JScrollPane, lo que podía hacer:

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

¿Cómo puedo conseguir que cuando en un JScrollPane?

Cheers, Gazler.

¿Fue útil?

Solución

Esta línea parece complejo, pero Think esto lo haría.

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

Sin embargo, creo que sería más interesante para almacenar sus TextArea de en un ArrayList.
Así que usted puede hacer esto:

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

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

Crear un nuevo es algo como esto:

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

Espero que esto ayude.

Otros consejos

Parece que usted obtendrá en un lío de referencias de allí (al menos eso es lo que ha sucedido a mí en el pasado).

Yo sugeriría que tener un medio objeto a cargo de esas dependencias para usted y para mover los métodos de "negocios" allí.

Así que en lugar de añadir componentes y perder las referencias (o peor, la duplicación de las referencias por todo el lugar) se puede utilizar este objeto que tendrá la referencia:

class AppMediator {
     private JTextArea area;
     private JTabbetPane pane;

     // etc. 

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

Vea la Mediador patrón de diseño. El enfoque es mover todos los objetos "vista" desde donde están (por lo general como referencias en subclases) a un objeto intermedio común.

Yo prefiero el enfoque AppMediator pero también se podía hacer

scrollPane.getViewport().getView()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top