Jtextfield somente numero (,)virgula

8 respostas
fabiodurgante

essa classe faz perfeitamente o que preciso é um jtextfield aceitar somente numeros e ,(virgula)

package caixa;

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

public class jTextOnlyNumber extends JFrame{

JTextField txtJT;

public jTextOnlyNumber(){
setTitle("TextField somente numeros");

Container contentPane = getContentPane();
contentPane.setLayout(null);
txtJT = new JTextField();
txtJT.setDocument(new NumberDocument());
txtJT.setBounds(16, 24, 185, 25);
contentPane.add(txtJT);
setSize(250, 100);
setVisible(true);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

}
public class NumberDocument extends PlainDocument{

public NumberDocument(){
super();

}
public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {
//permite apenas uma virgula
if(str.equals(",")){
if(txtJT.getText().indexOf(",")>-1)
return;
else
super.insertString(offset, str, attr);
}
if (str.codePointAt(0) < 48 || str.codePointAt(0) > 57)	return;
super.insertString(offset, str, attr);
}
}
public static void main(String args[]){
jTextOnlyNumber jt = new jTextOnlyNumber();
}
}

minha classe

public class teste extends javax.swing.JFrame {

    /** Creates new form teste */
    public teste() {
        initComponents();
    }
 private void jSair2ActionPerformed(java.awt.event.ActionEvent evt) {
        
        this.dispose();
}

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new teste().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jSair2;
    private javax.swing.JTextField valor;
    // End of variables declaration

}

quero coloca ela no meu jtextfield VALOR como posso fazer isso desde ja agradeço

8 Respostas

lina

Oi,

Na verdade, você precisa criar uma classe chamada JMoneyTextField (este nome é só um exemplo) e dar um extends em JFormattedTextField e implementar o PlainDocument do componente.

Algo parecido com o que você fez.

Tchauzin!

fabiodurgante

como poderia dar um exemplo na pratica valeuuuu

lina

Oi,

package caixa;

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

public class JMoneyTextField extends JFormattedTextField{

public JMoneyTextField(){

setDocument(new NumberDocument());
setBounds(16, 24, 185, 25);

}
public class NumberDocument extends PlainDocument{

public NumberDocument(){
super();

}
public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {
//permite apenas uma virgula
if(str.equals(",")){
if(txtJT.getText().indexOf(",")>-1)
return;
else
super.insertString(offset, str, attr);
}
if (str.codePointAt(0) < 48 || str.codePointAt(0) > 57)	return;
super.insertString(offset, str, attr);
}
}
}

Classe teste

public class Teste extends JFrame {

     public     Teste(){

          setSize(500,500)
          JMoneyTextField money = new JMoneyTextField();
          getContentePane().add(money);
     }

     public static void main(String args[]) {

          new Teste().setVisible(true);
     }
}

Pode ser que seu compilador aponte erros em alguns pontos. Editei seu código no notepad e sem compilador.

Tchauzin!

fabiodurgante

ta quase, assim da erro nessa classe teste

public class teste extends javax.swing.JFrame {

    public teste() {
        
        initComponents();
        
   JMoneyTextField money = new JMoneyTextField();
         getContentePane().add(money);     //aqui da erro
        
     
        addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
    }

erro aqui getContentePane cannot find symbol

e na classe

public class JMoneyTextField extends JFormattedTextField{
JTextField txtJT;   //tive que declarar esse txtJT   senao da erro aqui   if(txtJT.getText().indexOf(",")>-1) 
public JMoneyTextField(){
JuniorMaia
getContentPane().add(money);
fabiodurgante

para usar a classe JMoneyTextField jtextfield > personalizar codigo > criacao personalizada > new JMoneyTextField()

ai funciona no meu porem quando digito .(ponto) ou (,)virgula da erro

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at jtextfield_somente_numero.JMoneyTextField$NumberDocument.insertString(JMoneyTextField.java:26)
at javax.swing.text.AbstractDocument.replace(Abstra

o que poderia ser isso ???

lina

fabiodurgante:
para usar a classe JMoneyTextField jtextfield > personalizar codigo > criacao personalizada > new JMoneyTextField()

ai funciona no meu porem quando digito .(ponto) ou (,)virgula da erro

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at jtextfield_somente_numero.JMoneyTextField$NumberDocument.insertString(JMoneyTextField.java:26)
at javax.swing.text.AbstractDocument.replace(Abstra

o que poderia ser isso ???

Oi,

você não vai precisar fazer isso ó:

public class JMoneyTextField extends JFormattedTextField{ JTextField txtJT; //tive que declarar esse txtJT senao da erro aqui if(txtJT.getText().indexOf(",")>-1) public JMoneyTextField(){

Simplesmente use getText().:

if(getText().indexOf(",")>-1)

Tchauzin!

fabiodurgante

nao sei, so nao funciona colocar a virgula ou o ponto da erro

Criado 15 de maio de 2012
Ultima resposta 16 de mai. de 2012
Respostas 8
Participantes 3