Alguém,
Pode me explicar, do por que não estou conseguindo capturar o primeiro evento do gerado pelo teclado?
Exemplo rodo a aplicação, realizo um evento do teclado e o mesmo não e capturado. O mesmo não acontece, quando o primeiro evento gerado um ActionEvent, e após um KeyEvent.
Agradeço a todos.
Trajano
[code]import java.awt.;
import java.awt.event.;
import javax.swing.*;
import java.math.BigDecimal;
public class Calculadora extends JFrame implements ActionListener {
JTextField display = new JTextField(20);
JPanel botoes = new JPanel();
String buttons = "v%<C789/456*123-0.=+";
private boolean start = true;
private String op = "=";
String s;
private double arg = 0;
public Calculadora(String title) {
super(title);
setLayout(new BorderLayout());
display.setEditable(false);
add(display, "North");
botoes.setLayout(new GridLayout(5, 4));
for (int i = 0; i < buttons.length(); i++)
addButton(botoes, buttons.substring(i, i + 1));
add(botoes, "Center");
}
private void addButton(Container c, String s) {
JButton b = new JButton(s);
c.add(b);
b.addActionListener(this);
b.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(KeyEvent e) {
teclado_keyTyped(e);
}
});
}
private void criaMostraGUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(botoes);
setLocation(300, 300);
pack();
setVisible(true);
}
public static void main(String[] args) {
Calculadora gui = new Calculadora("Calculadora");
gui.criaMostraGUI();
}
//Tratamento dos eventos do MOUSE
public void actionPerformed(ActionEvent evt) {
s = evt.getActionCommand();
if ('0' <= s.charAt(0) && s.charAt(0) <= '9' || s.equals(".")) {
if (start)
display.setText(s);
else
display.setText(display.getText() + s);
start = false;
} else {
if (start) {
if (s.equals("-")) {
display.setText(s);
start = false;
} else
op = s;
} else {
double x = Double.parseDouble(display.getText());
calcula(x);
op = s;
start = true;
}
}
}
//Tratamento dos eventos do TECLADO
public void teclado_keyTyped(KeyEvent e) {
s =String.valueOf(e.getKeyChar());
if ('0' <= s.charAt(0) && s.charAt(0) <= '9' || s.equals(".")) {
if (start)
display.setText(s);
else
display.setText(display.getText() + s);
start = false;
} else {
if (start) {
if (s.equals("-")) {
display.setText(s);
start = false;
} else
op = s;
} else {
double x = Double.parseDouble(display.getText());
calcula(x);
op = s;
start = true;
}
}
}
//Operações
public void calcula(double n) {
String num = " ";
if (op.equals("+")) {
BigDecimal rB = (new BigDecimal(arg)).add(new BigDecimal(n));
num = String.valueOf(rB);
arg = Double.parseDouble(num);
} else if (op.equals("-")) {
BigDecimal rB = (new BigDecimal(arg)).subtract(new BigDecimal(n));
num = String.valueOf(rB);
arg = Double.parseDouble(num);
} else if (op.equals("*")) {
BigDecimal rB = (new BigDecimal(arg)).multiply(new BigDecimal(n));
num = String.valueOf(rB);
arg = Double.parseDouble(num);
} else if (op.equals("/")) {
BigDecimal rB = (new BigDecimal(arg)).divide(new BigDecimal(n));
num = String.valueOf(rB);
arg = Double.parseDouble(num);
} else if (op.equals("%"))
arg = arg * n / 100;
else if (op.equals("v"))
arg = Math.sqrt(n);
else if (op.equals("<"))
arg = (arg - 1);
else if (op.equals("="))
arg = n;
display.setText("" + arg);
}
}[/code]