Olá pessoal … Sou novo no Java e ainda tenho muitas duvidas. Estava tentando fazer um programa onde vc tem 1 jtextfield e um jlabel. Eu gostaria de pegar o lengh do jtextfield e aparecer no jlabel. Por Exemplo:
no jtextfield eu escrevo Thiago e no label aparece 5. ele conta o lengh do que esta digitado no jtextfield . Isso é possivel fazer ??
Sim , oque você tá tentando fazer é mais que possivel, faz o seguinte, no JTextField você pega o String que tá digitada através do método getText()., isto te retornará uma string, ai é só fazer
String texto = myJTextField.getText();
JLabel label = new JLabel(texto.length());
Se voce quizer atualizar o label dinamicamente , adicione um KeyListener ao JTextField.
Se ao fazertexto.length()der diferença com o digitado, use o trim(), assimtexto.trim().length()
É estremamente recomendavel ver se tem algo digidado antes de utilizar a string, para efitar nullpointer.
Valeu, espero ter ajudado
T
TylerPJ
Só uma observação: o JTextField estando vazio, getText() retorna “” e não null.
B
btscorpyonsPJ
Tentei o exemplo mas nao consegui … deu um erro … olha como ficou :
Você pode adicionar um KeyListener no JTextField, para que quando um evento de teclado ocorrer, o método adequado seja chamado. Para fazer isso use o método addKeyListener(KeyListener l) do JTextField.
Declarar e criar um JLabel como você está fazendo não vai fazer com que ele apareça. É preciso adicioná-lo na sua janela/painel. O ideal é criá-lo na inicialização e depois, no KeyListener, só mudar o texto.
J
JavaNightPJ
vc pode tb ao inves de instanciar o label de novo com o new…setar o texto
label.setText(String.valueOf(texto.length));
B
btscorpyonsPJ
Ainda nao consegui pessoal … o q sera q estou fazendo errado ??? olha como fiz …
//Overridden so we can exit when window is closedprotectedvoidprocessWindowEvent(WindowEvente){super.processWindowEvent(e);if(e.getID()==WindowEvent.WINDOW_CLOSING){System.exit(0);}}
ainda da erro … e nao consegui colocar esse KeyListener … onde coloco isso ??? no jbinit ??? no public class Frame1 extends JFrame?? no void jButton1_actionPerformed(ActionEvent e) ??? nao tenho ideia … sou iniciate mesmo … rs… desculpa novamente a burrice …
Abraços
Thiago
T
TylerPJ
Quando postar código, use os tags code. É bem mais legível.
Uma dica: se você quer aprender java, não use um IDE.
Fiz um exemplo pra você ver, o label é atualizado quando ENTER for pressionado:
importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassTestextendsJFrame{privateJTextFieldfield;privateJLabellabel;publicTest(){// LayoutsetLayout(newFlowLayout());// Cria os componentesfield=newJTextField(10);label=newJLabel("Tamanho: 0");// Adiciona um listenerfield.addKeyListener(newKeyListener(){publicvoidkeyPressed(KeyEvente){}publicvoidkeyReleased(KeyEvente){}publicvoidkeyTyped(KeyEvente){if(e.getKeyChar()==KeyEvent.VK_ENTER){label.setText("Tamanho: "+(field.getText().length()));}}});// Adiciona os componentesadd(field);add(label);// Ajusta o tamanho da janelapack();// Define o que fazer ao fechar a janelasetDefaultCloseOperation(EXIT_ON_CLOSE);// Mostra a janelasetVisible(true);}publicstaticvoidmain(String[]argumentos){newTest();}}
B
btscorpyonsPJ
Tentei fazer o teste mas nao deu … esse exemplo eu faco no JBuilder ou notepad ?? Copie e colei no notepad, fiz o javac e na hora de rodar deu pau … o q aconteceu ???
Abraços
Thiago
T
TylerPJ
O código compila e roda perfeitamente (pelo menos usando jdk 5.0 da sun em linux 2.6.9). Basta salvar em um arquivo chamado Test.java, compilar e rodar.
O que aconteceu? Só quem sabe é você, se você não disser qual erro deu, fica impossível ajudar.
B
btscorpyonsPJ
Ah … desculpe por nao ter colocado o erro … aconteceu o seguinte no dos prompt …
O que acontece é o seguinte, acho que nas versões do java anteriores ao 5.0 alguns métodos invocados no JFrame não são encaminhados para o ContentPane (que é onde de fato eles devem ser invodados). Como você deve estar usando um 1.4.x dá esse erro, mas a solução é fácil, é só invocá-los no ContentPane:
importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassTestextendsJFrame{privateJTextFieldfield;privateJLabellabel;publicTest(){// Cria uma referência para o ContentPaneContainercontainer=getContentPane();// Layoutcontainer.setLayout(newFlowLayout());// Cria os componentesfield=newJTextField(10);label=newJLabel("Tamanho: 0");// Adiciona um listenerfield.addKeyListener(newKeyListener(){publicvoidkeyPressed(KeyEvente){}publicvoidkeyReleased(KeyEvente){}publicvoidkeyTyped(KeyEvente){if(e.getKeyChar()==KeyEvent.VK_ENTER){label.setText("Tamanho: "+(field.getText().length()));}}});// Adiciona os componentescontainer.add(field);container.add(label);// Ajusta o tamanho da janelapack();// Define o que fazer ao fechar a janelasetDefaultCloseOperation(EXIT_ON_CLOSE);// Mostra a janelasetVisible(true);}publicstaticvoidmain(String[]argumentos){newTest();}}
Não sei se o mesmo acontece com o método add, mas por segurança é melhor chamá-lo no ContentPane também.