Nao estou conseguindo ... Jtextfield

11 respostas
B

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

11 Respostas

B

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

T

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

B

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

T

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.

J

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

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

B

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

package untitled19;

import java.awt.<em>;

import java.awt.event.</em>;

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

T

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();
    }
}
B

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

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

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

T

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.

Criado 9 de dezembro de 2004
Ultima resposta 14 de dez. de 2004
Respostas 11
Participantes 4