Como fazer uma JList interagir com uma JTextArea?

5 respostas
tiagomac

Olá pessoal, eu to com uma dúvida que segue abaixo:
Eu criei um JList que deve ter algumas opções para o usuário (no caso eu) para poder selecionar, dai eu quero que quando essas opções forem selecionadas elas imédiatamente sejam escritas no JTextArea criado no mesmo JFrame, isso é possível? ou sem a interação de um botão para armazenar em um string e apartir dai não seria possível?

segue abaixo os códigos:

Jlist:

private JList getJList_procurar_filter() { if (jList_procurar_filter == null) { jList_procurar_filter = new JList(); jList_procurar_filter.setBounds(new Rectangle(245, 60, 109, 134)); } return jList_procurar_filter; }

o da JTextArea:

private JTextArea getJTextArea_procurar_query() { if (jTextArea_procurar_query == null) { jTextArea_procurar_query = new JTextArea(); jTextArea_procurar_query.setBounds(new Rectangle(8, 201, 346, 27)); jTextArea_procurar_query.setTabSize(2); jTextArea_procurar_query.setLineWrap(true); } return jTextArea_procurar_query; }

Outra dúvida até que tenho: o JList vai ter algumas opções que estão no SET de uma tabela no MySQL, como eu só preciso saber quais foram selecionados para poder gerar uma string para usar no query eu não necessariamente precisaria extrair essas informações direto do banco de dados, mas ai que surge a dúvida, não conheço os modelos de lista e qual a diferença entre eles, aqui no Visual Editor ele me da várias opções, pelo que eu pesquisei o defaultlistmodel seria o mais adequado, pois, o que eu preciso é básicamente exibir uns 5 nomes na jList, e quando selecionados, eles sejam armazenados em uma string e logo passados para o JTextArea para formar o query final de pesquisa, qual modelo seria melhor eu usar? e como faço essa interação entre os 2? para que exiba os selecionados em tempo real?

Obrigado e um grande abraço a todos :)!

5 Respostas

ViniGodoy

Para saber quando um item foi selecionado num JList, você pode usar o evento valueChanged. Muitas GUIs, ao invés do evento, utilizam um botão (por exemplo, o usuário seleciona tudo no list e clica no botão “Ver propriedades”).

Para saber quais foram os itens selecionados, use o método getSelectedIndices(). Ele retorna um array de inteiros (int[]) onde cada elemento é um índice para um objeto selecionado na lista. Você então pode obter o objeto em si através de seu ListModel.

Com os objetos na mão, não tem muita crise. Formate a informação que você quer mostrar e dê um setText() no seu JTextArea.

Quanto ao modelo. O que fazemos aqui é criar nosso próprio modelo, filho de AbstractListModel. Além de fácil de fazer, dá muito mais flexibilidade e podemos trabalhar diretamente com nossos objetos, sem os casts que o DefaultListModel exige.

Caso você não queira programar seu model, use mesmo o DefaultListModel.

Para mais informações, esse tutorial da sun ajuda bastante:
http://java.sun.com/docs/books/tutorial/uiswing/components/list.html

tiagomac

Valeu Vinny pela ajuda, já deu para entender alguma coisa, agora a dúvida só continua quanto ao que eu fizer no jlist aparecer no jtextarea… e nos outros componentes, tenho também jtextfields e ainda não faço idéia de como fazer para conforme um conteúdo for sendo digitado nele, o mesmo vá aparecendo no outro jtextarea.

tiagomac

Olá pessoal, ainda sobre o tema eu me encontro com um problema que tá difícil de resolver, eu gostaria de obter todo o texto de uma JTextField e passar para uma JTextArea em tempo real (conforme o mesmo for sendo digitado), eu fiz um teste e o que tá acontecendo é que o último carácter é omitido, ou sejá, não aparece… apesar dos outros aparecerem, porem, se eu apertar até um ENTER que sejá, o carácter aparece. tudo funciona perfeitamente, mesmo isso :(!

vejá na imagem como está:

e o código do JTextField:

private JTextField getJTextField_procurar_nome() { if (jTextField_procurar_nome == null) { jTextField_procurar_nome = new JTextField(); jTextField_procurar_nome.setBounds(new Rectangle(49, 60, 192, 18)); jTextField_procurar_nome.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent e) { getJTextArea_procurar_query().setText(getJTextField_procurar_nome().getText()); } }); } return jTextField_procurar_nome; }

Então, eu tentei utilizar o getKeyChar() para pegar o valor do evento, ou sejá ‘e’… mas eu encontro um problema quando uso o mesmo, pois quando dou um backspace para apagar o texto, ele me retorna um carácter desconhecido, em vez de apagar o último carácter… tentei também o String.valueOf()… mas o mesmo me retorna um carácter desconhecido, como um retângulo sempre que aperto o backspace ou qualquer tecla para deletar…

alguém tem uma idéia? algo que possa me ajudar? pelo que eu notei e to achando que seja, ele armazena o valor na memória, mas só libera depois que digitamos outro valor… ai o outro valor fica na memória e não vai pra onde deve ir até que digitemos outro e assim em diante… alguém sabe como posso solucionar esse problema? preciso do texto conforme escrito no JTextField… um abraço a todos e fico no aguardo de um retorno.

Petronio_Braga

tiagomac,

fiz um pequeno exemplo tentando elucidar suas dúvidas.

  • JList com JTextArea
  • JTextField com JTextArea

Segue anexo. O campo TextField está logo abaixo do TextArea.

Espero que ajude a esclarecer.

tiagomac

Olá Petrônio, to respondendo só p/ dizer que deu tudo certo :)! o keypressed+keyrelease fez uma diferença enorme *rs!
Obrigado mesmo por ter se dado ao trabalho de escrever esse programinha… fico muito grato á você.

Criado 9 de janeiro de 2007
Ultima resposta 13 de jan. de 2007
Respostas 5
Participantes 3