Implementação do KeyEvent

2 respostas
C

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

2 Respostas

W
quanto aos eventos do teclado é so o 1° evento que não pega ? ou nenhum evento pega?

eu aconselho a adicionar o botao ao container dps de configura-lo

JButton b = new JButton(s);

b.addActionListener(this);

b.addKeyListener(new java.awt.event.KeyAdapter() {

public void keyTyped(KeyEvent e) {

teclado_keyTyped(e);

}

});

c.add(b);     <==

to no trampo dps termino de ler todo o codigo :smiley:

C

Somente o primeiro evento que não e capturado, os demais sim …
Desde que você, tenha chamado primeiro um evento de mouse…
Valeu

Criado 15 de outubro de 2007
Ultima resposta 15 de out. de 2007
Respostas 2
Participantes 2