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.
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.
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();
}
}
//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);
}
}
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 …
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 ???
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.
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)
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.