Das hier ist ein kleines Programm, indem man zwei Operanden eingeben kann, und drückt man auf eine Grundrechenart, plus, minus, mal, geteilt erscheint die Lösung.
Das Ziel ist es die Ereignisbehandlung für alle JButtons auf einer anderen Klasse zu erstellen, nämlich in einer Klasse OperatorListener welches ActionListener implementiert.
Ich habe eine Lösung, in der eine innere Klasse benutzt wird. Jetzt wollte ich das gleiche ohne eine innere Klasse, sondern mit einer normalen Klasse lösen. Ist das möglich, ohne in der Klasse RechenFrame Änderungen vorzunehmen (Beispiel getter) ? Mich interessiert es aus Übungszwecken, wie ich das auch anderst lösen könnte.
Wäre eine Lösung auch möglich in dem OperatorListener von RechenFrame erbt? Habe keine andere Lösung hinbekommen die funktioniert.
Freue mich auf euere Ideen.
Hier nur die Klasse RechenFrame:
Hier die Lösung mit der inneren Klasse OperatorListener:
Das Ziel ist es die Ereignisbehandlung für alle JButtons auf einer anderen Klasse zu erstellen, nämlich in einer Klasse OperatorListener welches ActionListener implementiert.
Ich habe eine Lösung, in der eine innere Klasse benutzt wird. Jetzt wollte ich das gleiche ohne eine innere Klasse, sondern mit einer normalen Klasse lösen. Ist das möglich, ohne in der Klasse RechenFrame Änderungen vorzunehmen (Beispiel getter) ? Mich interessiert es aus Übungszwecken, wie ich das auch anderst lösen könnte.
Wäre eine Lösung auch möglich in dem OperatorListener von RechenFrame erbt? Habe keine andere Lösung hinbekommen die funktioniert.
Freue mich auf euere Ideen.
Hier nur die Klasse RechenFrame:
Java:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RechenFrame extends JFrame {
private static final long serialVersionUID = 3211418102894914613L;
private JTextField operand1, operand2;
private JButton plus, minus, mal, geteilt;
private JLabel ergLabel;
public RechenFrame() {
setLayout(new GridLayout(0, 4));
add(new JLabel("Operand 1:", JLabel.RIGHT));
operand1 = new JTextField(4);
add(operand1);
add(new JLabel("Operand 2:", JLabel.RIGHT));
operand2 = new JTextField(4);
add(operand2);
add(plus = new JButton("+"));
plus.addActionListener(new OperatorListener('+'));
add(minus = new JButton("-"));
minus.addActionListener(new OperatorListener('-'));
add(mal = new JButton("*"));
mal.addActionListener(new OperatorListener('*'));
add(geteilt = new JButton("/"));
geteilt.addActionListener(new OperatorListener('/'));
add(new JLabel("Ergebnis: ", JLabel.RIGHT));
add(ergLabel = new JLabel(""));
ergLabel.setOpaque(true);
ergLabel.setBackground(Color.WHITE);
}
public static void main(String[] args) {
RechenFrame Rechenfenster = new RechenFrame();
Rechenfenster.setTitle("RechenFrame");
Rechenfenster.setSize(300, 100);
Rechenfenster.setVisible(true);
Rechenfenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Hier die Lösung mit der inneren Klasse OperatorListener:
Java:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RechenFrame extends JFrame {
private static final long serialVersionUID = 3211418102894914613L;
private JTextField operand1, operand2;
private JButton plus, minus, mal, geteilt;
private JLabel ergLabel;
public RechenFrame() {
setLayout(new GridLayout(0, 4));
add(new JLabel("Operand 1:", JLabel.RIGHT));
operand1 = new JTextField(4);
add(operand1);
add(new JLabel("Operand 2:", JLabel.RIGHT));
operand2 = new JTextField(4);
add(operand2);
add(plus = new JButton("+"));
plus.addActionListener(new OperatorListener('+'));
add(minus = new JButton("-"));
minus.addActionListener(new OperatorListener('-'));
add(mal = new JButton("*"));
mal.addActionListener(new OperatorListener('*'));
add(geteilt = new JButton("/"));
geteilt.addActionListener(new OperatorListener('/'));
add(new JLabel("Ergebnis: ", JLabel.RIGHT));
add(ergLabel = new JLabel(""));
ergLabel.setOpaque(true);
ergLabel.setBackground(Color.WHITE);
}
class OperatorListener implements ActionListener {
char oper;
OperatorListener(char oper) {
this.oper = oper;
}
public void actionPerformed(ActionEvent e) {
try {
double op1 = Double.valueOf(operand1.getText()).doubleValue();
double op2 = Double.valueOf(operand2.getText()).doubleValue();
double erg;
if (oper == '+')
erg = op1 + op2;
else if (oper == '-')
erg = op1 - op2;
else if (oper == '*')
erg = op1 * op2;
else
erg = op1 / op2;
ergLabel.setText("" + erg);
} catch (Exception ex) {
ergLabel.setText("Unzulaessige Eingabe!");
}
}
}
public static void main(String[] args) {
RechenFrame Rechenfenster = new RechenFrame();
Rechenfenster.setTitle("RechenFrame");
Rechenfenster.setSize(300, 100);
Rechenfenster.setVisible(true);
Rechenfenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}