Pessoal, seguinte, antes de perguntar algo aqui eu pesquiso bastante, pois evito perguntar. Pesquisei sobre como fazer para que determinados campos aceitem apenas números e encontrei alguns tópicos, um deles de 2004, que é o seguinte:
http://www.guj.com.br/posts/list/13598.java#70834
Neste campo o Roberto, se não me engano, descreve como fazer isso exatamente com está no livro em que estou aprendendo, o código é muito parecido. O probelma é que não etá funcionando. No exemplo que o livro usa para ensinar esse assunto, Controle de Eventos, também não funciona, pois o campo acaba aceitando qualquer tecla, caracter ou números.
Aí eu pergunto, como resolver esse problema ? Já tentei de tudo ! Pesquisei no Google sobre a tabela ASC e encontrei em todos os resultados da pesquisa que os caracteres numéricos vão de 48 até 57, vejam:
http://www.inf.puc-rio.br/~inf1381/material/ascii.pdf
Tentei usar essa faixa de caracteres, mas não deu em nada, continua o mesmo problema.
Escrevi exatamente o que o Roberto propôs no tópico, nada ! Fui ver o tutorial lá postado, mas ele só fala de limitar o número de caracteres num campo.
Alguém pode me ajudar com mais esse problema ?
Meu código está aí embaixo:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Exercicio1003 extends JFrame implements ActionListener, ItemListener, KeyListener
{
JLabel label1,label2,label3;
JTextField t1,t2;
JButton b1,b2;
JComboBox combo;
public static void main (String args[])
{
JFrame janela = new Exercicio1003();
janela.setUndecorated(true);
janela.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.setVisible(true);
}
Exercicio1003()
{
setTitle("Cálculo do preço final");
setBounds(200,50,380,130);
getContentPane().setBackground(new Color(135,206,235));
label1 = new JLabel("Informe o valor de vendas");
label1.setForeground(Color.black);
label1.setFont(new Font("Arial", Font.BOLD,12));
label2 = new JLabel("Escolha a forma de pagamento");
label2.setForeground(Color.black);
label2.setFont(new Font("Arial", Font.BOLD,12));
label3 = new JLabel("Preço final a pagar");
label3.setForeground(Color.black);
label3.setFont(new Font("Arial", Font.BOLD,12));
t1 = new JTextField(); t2 = new JTextField(); t2.setEditable(false);
b1 = new JButton("Calcular"); b1.addActionListener(this);
b2 = new JButton("Limpar"); b2.addActionListener(this);
String[] opcoes = {"Dinheiro","Cheque","Cartao"};
combo = new JComboBox(opcoes);
combo.addItemListener(this);
getContentPane().setLayout(new GridLayout(4,2,2,2));
getContentPane().add(label1);
getContentPane().add(t1);
getContentPane().add(label2);
getContentPane().add(combo);
getContentPane().add(label3);
getContentPane().add(t2);
getContentPane().add(b1);
getContentPane().add(b2);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b2)
{
t1.setText(""); t2.setText("");
return;
}
float n1 = 0;
double total = 0;
try
{
n1 = Float.parseFloat(t1.getText());
}
catch (NumberFormatException erro)
{
t2.setText("Erro");
return;
}
if(combo.getSelectedItem()== "Dinheiro")
{
total = n1*0.95;
}
if(combo.getSelectedItem()== "Cheque")
{
total = n1*1.05;
}
if(combo.getSelectedItem()== "Cartao")
{
total = n1*1.1;
}
if(e.getSource()== b1)
{
t2.setText("" + total);
}
}
public void keyPressed(KeyEvent e)
{
if (e.getSource()==t1)
{
if(e.getKeyCode()<96||e.getKeyCode()>105)
{
e.setKeyCode(e.VK_ESCAPE);
return;
}
if(e.getKeyCode()==44)
{
t1.setText(t1.getText()+ ".");
}
}
}
public void keyReleased(KeyEvent e)
{
// Uma tecla foi solta
}
public void keyTyped(KeyEvent e)
{
// Uma tecla Unicode foi pressionada
}
public void itemStateChanged(ItemEvent r)
{
combo.getSelectedItem();
}
}
Preciso que o JTextField t1 aceite apenas caracteres numéricos, a tecla BackSpace e trasforme a vírgula em ponto decimal.
A parte do código que vai da linha 99 até a 102 são para fazer com que o campo transforme em ponto decimal(.) quando o usuário digitar vírgula(,). Mas também não está funcionando, se alguém puder ajudar mais nesse problema, ficaria muito grato também.
EStou meio que perdido com essa parte de Controle de Eventos.
E então, alguém pode ajudar aí ?
Obrigado desde já !