Acceso a una JTextArea en un JScrollPane
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.
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()