Acessando um JTextArea em um JScrollPane
Pergunta
Eu tenho um JTextArea em (múltiplos) JScrollPane em um JTabbedPane.
Eu preciso acessar o JTextArea. Se eu não tinha o JScrollPane, eu poderia fazer:
JTextArea c = (JTextArea)jTabbedPane1.getComponentAt(i);
Como eu poderia obtê-lo quando em um JScrollPane?
Cheers, Gazler.
Solução
Esta linha parece complexo, mas eu THINK isso iria fazê-lo.
JTextArea c = (JTextArea) (((JViewportView) (((JScrollPane) jTabbedPane1.getComponentAt(i)).getViewport()))).getView();
Mas eu acho que seria mais interessante para armazenar seu TextArea
está em um ArrayList
.
Então você pode fazer isso:
List<JTextArea> listAreas = new ArrayList<JTextArea>();
...
JTextArea c = listAreas.get(i);
Criar um novo é algo como isto:
JTextArea c = new JTextArea();
jTabbedPane1.addTab("Title", new JScrollPane(c));
listAreas.add(c);
Espero que isso ajude.
Outras dicas
Parece que você vai entrar em uma confusão de referências lá (pelo menos é o que me aconteceu no passado).
Eu sugiro que você tem um objeto meio no comando dessas dependências para você e para mover os métodos de "negócios" lá.
Assim, em vez de adicionar componentes e perder as referências (ou pior, duplicando as referências em todo o lugar), você pode usar esse objeto que terá a referência:
class AppMediator {
private JTextArea area;
private JTabbetPane pane;
// etc.
public void doSomethingWithText() {
this.area.getText(); // etc
}
}
Veja a href="http://en.wikipedia.org/wiki/Mediator_pattern" rel="noreferrer"> padrão de design . O foco é a mover todos os objectos "vista" de onde eles são (geralmente como referências em subclasses) para um objeto intermediário comum.
Eu prefiro a abordagem AppMediator mas você também pode fazer
scrollPane.getViewport().getView()