Separar classes

6 respostas
Y

Tenho o seguinte código de uma calculadora simples, tirei numeros e operações para facilitar.
Quero separar em classes este código, mas por exemplo, quando separo a classe Limpar, dá erro, ja tentei corrigí-lo mas não está funcionando..

[quote]
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;

class Calc extends JFrame {

TextField txtResult;
Button btnIgual, btnClear, btn1, btn2, btnSom;
float a = 0, b = 0;
char op;
boolean ativado = false, ativado2 = false;

Calc() {

setBackground(Color.orange);
setLocation(450, 250);
setSize(310, 320);
setLayout(null);
setTitle(".:calculadora:.");

txtResult = new TextField("0");
txtResult.setBounds(60, 60, 118, 25);
add(txtResult);

btn1 = new Button("1");
btn1.setBounds(60, 150, 35, 25);
add(btn1);

btn2 = new Button("2");
btn2.setBounds(100, 150, 35, 25);
add(btn2);

btnIgual = new Button("=");
btnIgual.setBounds(60, 180, 35, 25);
add(btnIgual);

btnSom = new Button("+");
btnSom.setBounds(10, 90, 35, 25);
add(btnSom);

btnClear = new Button("C");
btnClear.setBounds(10, 60, 35, 25);
add(btnClear);

setVisible(true);
btnClear.addActionListener(new Limpar());
btn1.addActionListener(new Um());
btn2.addActionListener(new Dois());
btnSom.addActionListener(new Somar());
btnIgual.addActionListener(new Resultado());
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}

class Somar implements ActionListener {
public void actionPerformed(ActionEvent e) {
op = '+';
a = Float.parseFloat(txtResult.getText());
ativado = true;
}
}

class Resultado implements ActionListener {
public void actionPerformed(ActionEvent e) {

if (ativado2 == false) {
b = Float.parseFloat(txtResult.getText());
}

switch (op) {
case '+':
a = a + b;
txtResult.setText(String.valueOf(a));
ativado = true;
ativado2 = true;
break;

}
}
}

class Limpar implements ActionListener {
public void actionPerformed(ActionEvent e) {
txtResult.setText("0");
ativado = false;
}
}

class Um implements ActionListener {
public void actionPerformed(ActionEvent e) {

ativado2 = false;

if ("0".equals(txtResult.getText()) || (ativado == true)) {
txtResult.setText("1");
ativado = false;
} else
txtResult.setText(txtResult.getText() + "1");
}
}

class Dois implements ActionListener {
public void actionPerformed(ActionEvent e) {

ativado2 = false;

if ("0".equals(txtResult.getText()) || (ativado == true)) {
txtResult.setText("2");
ativado = false;
} else
txtResult.setText(txtResult.getText() + "2");
}
}

public static void main(String[] arg) {
Calc ob = new Calc();
}

}
[code]

6 Respostas

fiaux

Qual erro?

Y
Se faço deste modo aparece erro nas linhas 7 e 8!
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


class Limpar implements ActionListener {
	public void actionPerformed(ActionEvent e) {
		txtResult.setText("0");
		ativado = false;
	}
}
e fazendo deste modo não da erro, mas o programa não funciona!
import java.awt.Button;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class Limpar implements ActionListener {

	TextField txtResult;
	Button btnIgual, btnClear, btn1, btn2, btnSom;
	float a = 0, b = 0;
	char op;
	boolean ativado = false, ativado2 = false;

	public void actionPerformed(ActionEvent e) {
		txtResult.setText("0");
		ativado = false;
	}
}
fiaux

A variavel txtResult é da sua classe Calc, e essa classe listener é interna a ela. Qual sua motivação para separar?

Y

é o que quer o meu prof.

fiaux

Beleza, não tenho certeza, mas acho que o ActionEvent consegue te responder em quem foi disparado o evento. Você não vai poder acessar direto sua variável textfield, vai ter que pegar em quem foi disparado o evento, a partir do ActionEvent e fazer a ação necessária. Vai ter que mudar sua implementação.

Shelson

vc precisará entender o conceito de Inner-class Listeners. procure.

vou explicar atraves de um exemplo do site:http://www.leepoint.net/notes-java/GUI/events/inner_class_listener.html

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

class SomePanel extends JPanel {

    private JButton    myGreetingButton = new JButton("Hello");
    private JTextField myGreetingField  = new JTextField(20);

    //=== Constructor
    public SomePanel() {
        ActionListener doGreeting = new GreetingListener();
        myGreetingButton.addActionListener(doGreeting);
        myGreetingField.addActionListener(doGreeting);
        // . . . Layout the panel.
    }


    /////////////////////////// Define inner class as listener.
    private class GreetingListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            myGreetingField.setText("Guten Tag");
        }
    }
}

se ao inves de usar uma inner class(procure e entenda o significa, é báscio e importante), vc utilizasse uma classe externa, a classe em questao não teria acesso aos atributos da classe principal - ex.: myGreetingField

Caso tenha resolvido, favor informar, ou fique a vontade para sanar dúvidas.
Estou à disposição.

Criado 24 de junho de 2008
Ultima resposta 6 de jul. de 2008
Respostas 6
Participantes 3