Nao estou conseguindo ... Jtextfield

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 ??

Abraços

Thiago

Olá, bom dia.

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

Só uma observação: o JTextField estando vazio, getText() retorna “” e não null.

Tentei o exemplo mas nao consegui … deu um erro … olha como ficou :

void jButton1_actionPerformed(ActionEvent e) {
String texto = txt1.getText() ;
JLabel lbl = new JLabel (texto.length() );

Estou usando o JBuilder … apareceu um erro no new … o q faço ???
e como posso adicionar o KeyListener ??? o que é isso ???

Desculpe as perguntas

Abraços Thiago

Você está tentando passar um int para o construtor do JLabel quando você deve passar um String, por isso o erro.

Um KeyListener é um objeto que implementa a interface de mesmo nome, a qual tem os seguinte métodos:

void keyTyped(KeyEvent e);
void keyPressed(KeyEvent e);
void keyReleased(KeyEvent e);

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.

vc pode tb ao inves de instanciar o label de novo com o new…setar o texto

label.setText(String.valueOf(texto.length));

Ainda nao consegui pessoal … o q sera q estou fazendo errado ??? olha como fiz …

package untitled19;

import java.awt.;
import java.awt.event.
;
import javax.swing.*;

/**

  • <p>Title: </p>
  • <p>Description: </p>
  • <p>Copyright: Copyright © 2004</p>
  • <p>Company: </p>
  • @author not attributable
  • @version 1.0
    */

public class Frame1 extends JFrame {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
JTextField jTextField1 = new JTextField();
JButton jButton1 = new JButton();
JLabel jLabel1 = new JLabel();

//Construct the frame
public Frame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}

//Component initialization
private void jbInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
jTextField1.setText(“jTextField1”);
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(400, 300));
this.setTitle(“Frame Title”);
jButton1.setText(“jButton1”);
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
jLabel1.setText(“jLabel1”);
contentPane.add(jTextField1, BorderLayout.NORTH);
contentPane.add(jButton1, BorderLayout.SOUTH);
contentPane.add(jLabel1, BorderLayout.CENTER);
}

//Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}

void jButton1_actionPerformed(ActionEvent e) {
jLabel1.setText(String.valueOf(jTextField1.length));
}
}

class Frame1_jButton1_actionAdapter implements java.awt.event.ActionListener {
Frame1 adaptee;

Frame1_jButton1_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}

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

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:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JFrame {
    private JTextField field;
    private JLabel label;
    public Test() {
        // Layout
        setLayout(new FlowLayout());
        // Cria os componentes
        field = new JTextField(10);
        label = new JLabel("Tamanho: 0");
        // Adiciona um listener
        field.addKeyListener(new KeyListener() {
            public void keyPressed(KeyEvent e) {}
            public void keyReleased(KeyEvent e) {}
            public void keyTyped(KeyEvent e) {
                if (e.getKeyChar() == KeyEvent.VK_ENTER) {
                    label.setText("Tamanho: " + (field.getText().length()));
                }
            }
        });
        // Adiciona os componentes
        add(field);
        add(label);
        // Ajusta o tamanho da janela
        pack();
        // Define o que fazer ao fechar a janela
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        // Mostra a janela
        setVisible(true);
    }
    public static void main(String[] argumentos) {
        new Test();
    }
}

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

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.

Ah … desculpe por nao ter colocado o erro … aconteceu o seguinte no dos prompt …

Microsoft Windows XP [versão 5.1.2600]
© Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\Bruno e Thiago>cd meus documentos

C:\Documents and Settings\Bruno e Thiago\Meus documentos>javac Test.java

C:\Documents and Settings\Bruno e Thiago\Meus documentos>java Test
Exception in thread “main” java.lang.Error: Do not use Test.setLayout() use Test.getContentPane().se
tLayout() instead
at javax.swing.JFrame.createRootPaneException(Unknown Source)
at javax.swing.JFrame.setLayout(Unknown Source)
at Test.<init>(Test.java:10)
at Test.main(Test.java:35)

Abraços

Thiago

Agora sim :).

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:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JFrame {
    private JTextField field;
    private JLabel label;
    public Test() {
        // Cria uma referência para o ContentPane
        Container container = getContentPane();
        // Layout
        container.setLayout(new FlowLayout());
        // Cria os componentes
        field = new JTextField(10);
        label = new JLabel("Tamanho: 0");
        // Adiciona um listener
        field.addKeyListener(new KeyListener() {
            public void keyPressed(KeyEvent e) {}
            public void keyReleased(KeyEvent e) {}
            public void keyTyped(KeyEvent e) {
                if (e.getKeyChar() == KeyEvent.VK_ENTER) {
                    label.setText("Tamanho: " + (field.getText().length()));
                }
            }
        });
        // Adiciona os componentes
        container.add(field);
        container.add(label);
        // Ajusta o tamanho da janela
        pack();
        // Define o que fazer ao fechar a janela
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        // Mostra a janela
        setVisible(true);
    }
    public static void main(String[] argumentos) {
        new Test();
    }
}

Não sei se o mesmo acontece com o método add, mas por segurança é melhor chamá-lo no ContentPane também.