Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no Ex. 7 da Aula 7 - Executando diferentes ações e o Observer

Oi gente! Estou na aula de padrao observer do capitulo design_pattern. tenho o seguinte código da classe calculadora. Quero saber como faço para que para que os meus números de facto produzam eventos ao clicar, as minhas operações matemáticas também funcione ?

public class Calculadora extends JFrame{

JTextField texto;

public Calculadora(){ super("Calculadora");

texto = new JTextField("Calculo"); texto.setFont(new Font("serif", Font.ITALIC, 70));

Container c = getContentPane(); c.setLayout(new BorderLayout()); c.setBackground(Color.BLACK); Container c2 = new JPanel();

c2.setLayout(new GridLayout(4,4,5,5)); c2.setBackground(Color.LIGHT_GRAY);

c.add(BorderLayout.NORTH, texto); c.add(BorderLayout.CENTER, c2);

c2.add(new JButton("7")); c2.add(new JButton("8")); c2.add(new JButton("9"));

c2.add(new JButton("+")); c2.add(new JButton("4")); c2.add(new JButton("5"));

c2.add(new JButton("6")); c2.add(new JButton("-")); c2.add(new JButton("1"));

c2.add(new JButton("2")); c2.add(new JButton("3")); c2.add(new JButton("/"));

c2.add(new JButton("0")); c2.add(new JButton(".")); c2.add(new JButton("=")); c2.add(new JButton("*"));

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 400); setVisible(true);

}

public static void main(String[] args) {

new Calculadora();

}

}

2 respostas
solução!

Olá Cremildo!

Para adicionar um evento ao botão você terá que usar o método addActionListener() em seus botões. No entanto, nesse método é passado como parâmetro um objeto de uma classe que implemente a interface ActionListener. Para utilizar esse método corretamente você deve possuir alguns conhecimentos sobre GUI. Assim, segue abaixo uma forma de utilizar o método com a utilização de classes anônimas:


    JTextField texto;
    JButton b1 = new JButton("1");


    public Calculadora(){ 

        //RESTANTE DO CÓDIGO

        b1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                texto.setText(texto.getText() + b1.getText());

            }
        });    

// RESTANTE DO CÓDIGO

}

Quanto a realizar as operações, creio que uma boa solução para o seu caso, seria a utilização do Design Pattern Interpreter. Sobre tal padrão você pode encontrar no curso de Java Avançado.

Enfim, Espero ter ajudado! Bons Estudos!

Ok, obrigado Romário! ajudou sim, vou implementar a dica, se algo me complicar voltarei!