Hallo Liebe Leute,
Ich stehe vor dem Problem die Tasten eines Taschenrechners zu "aktivieren" / dem ActionListiner zu zuordnen...
Bisher sieht das gute Stück so aus:
Zunächst einmal die Klasse TRView
und die Klasse TRControl
Die Klasse TRModell sollte soweit richtig sein diese könnte ich bei Bedarf posten.
Zu meiner Frage:
In der Klasse TRView Zeile 69.
Dort wollte ich die Buttons dem ActionListiner zuordnen doch weiß nicht genau wie ich das anstellen soll ...
auch bin ich mir unsicher mit dem static in Zeile 19-27
wenn ich das Static entferne gibt es Probleme mit der Klasse TRControl..
Ich hoffe ihr könnt mir helfen
Falls ihr Verbesserungsvorschläge habt
immer her damit !
:toll:
Ich stehe vor dem Problem die Tasten eines Taschenrechners zu "aktivieren" / dem ActionListiner zu zuordnen...
Bisher sieht das gute Stück so aus:

Zunächst einmal die Klasse TRView
Java:
import java.awt.*;
import javax.swing.*;
/**
* Erzeugt einen Taschenrechner
* @author Joe
*
*/
public class TRView extends JFrame // eigene Frame Klasse wird definiert
{
private JTextField anzeige = new JTextField();
{
this.anzeige.setEditable(false);
// anzeige.setPreferredSize(new Dimension(300,20));
}
Container c; //Container dieses Frames
JPanel oben, mitte; //Panel erstellen
static JButton b[] = new JButton[10]; // Tasten 1-9
static JButton buttonplus = new JButton("+");
static JButton buttonminus = new JButton("-");
static JButton buttonmal = new JButton("*");
static JButton buttongeteilt = new JButton("/");
static JButton buttongleich = new JButton("=");
static JButton buttoncancel = new JButton("c");
static JButton buttonnull = new JButton("0");
protected TRModel model = new TRModel();
protected TRControl controller = new TRControl(this, model);
public TRView()
{
super ("Taschenrechner1.0");
c = getContentPane(); //Bestimme die Referenz auf den eigenen Container
oben = new JPanel();//panel erzeugen
mitte = new JPanel(new GridLayout(4,4));
anzeige = new JTextField("");
anzeige.setPreferredSize(new Dimension(290,20));
oben.add(anzeige);
for(int i = 1; i< 10; i++)
{ //Erstellt die Tasten 1-9
b[i] = new JButton (""+ i);
mitte.add(b[i]);
if(i == 3)
{
mitte.add(buttonplus); //erstellt das Plus nach der 3
}
if(i == 6)
{
mitte.add(buttonminus); // erstellt das minus nach der 6
}
if(i== 9)
{
mitte.add(buttonmal); // untere Tasten
mitte.add(buttoncancel);
mitte.add(buttonnull);
mitte.add(buttongleich);
mitte.add(buttongeteilt);
}
}
c.add(oben,BorderLayout.NORTH); //Textfeld
c.add(mitte,BorderLayout.WEST); //Tasten
//for (JButton a : b) { a.addActionListener(controller); }
}
public void update() {
String result = model.getResult();
String operator = model.getOperator();
String operand = model.getOperand();
String error = model.getError().equals("") ? "" : (model.getError() + "!!!");
anzeige.setText(result + operator + operand + error);
}
public static void main(String[] args)
{
TRView rechner = new TRView();//Erzeuge ein Fesnter Objekt
rechner.setSize(300,300); //Größe des Fesnters
rechner.setLocation(250, 190);
rechner.setVisible(true); //Darstellen des Fesnters
rechner.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Fenster schließen
rechner.setLayout(new BorderLayout());
}
}
und die Klasse TRControl
Java:
import java.awt.event.*;
public class TRControl implements ActionListener {
/**
* Datenfelder des Controller Objekts eines Taschenrechners
*/
private TRView view;
private TRModel model;
/**
* Konstruktor zum Anlegen eines Taschenrechner Controller Objekts
* @param v Viewobjekt eines Taschenrechners, dass dieser Controller betreut
* @param m Modelobjekt eines Taschenrechners, dass dieser Controller betreut
*/
public TRControl (TRView v, TRModel m) {
this.view = v;
this.model = m;
}
/* ActionListener - Diese Methode wird immer aufgerufen, wenn ein Button auf dem TR
* betaetigt wurde.
*/
public void actionPerformed(ActionEvent ev) {
if (ev.getSource() == TRView.b) zahlAnhaengen("");
if (ev.getSource() == TRView.buttonnull) zahlAnhaengen("0"); // 0
if (ev.getSource() == TRView.buttonplus) setRechenzeichen("+"); // Plus
if (ev.getSource() == TRView.buttonminus) setRechenzeichen("-"); // Minus
if (ev.getSource() == TRView.buttonmal) setRechenzeichen("*"); // Mal
if (ev.getSource() == TRView.buttongeteilt) setRechenzeichen("/"); // Geteilt
if (ev.getSource() == TRView.buttongleich) berechnen(); // =
if (ev.getSource() == TRView.buttoncancel) loeschen(); // C
}
/**
* Wird aufgerufen, wenn eine Zahl auf dem Taschenrechner betaetigt wurde
* Diese Zahl wird der aktuell auf dem Display stehenden Zahl angehaengt
* @param i Die Ziffer die an den aktuell eingegebenen Operanden angehaengt werden soll
*/
private void zahlAnhaengen (String i) {
model.setOperand(model.getOperand() + i);
view.update();
}
/**
* Wird aufgerufen, wenn eine Operatoraste, -, /, *) betaetigt wurde
* @param i Der eingegebene Operator (+, -, /, *)
*/
private void setRechenzeichen (String i) {
model.setOperator(i);
view.update();
}
/**
* Wird aufgerufen, wenn die C Taste auf einem Taschenrechner
* betaetigt wurde.
*/
private void loeschen() {
model.clear();
view.update();
}
/**
* Wird aufgerufen, wenn die = Taste auf einem Taschenrechner betaetigt wurde.
*/
private void berechnen() {
model.berechne();
view.update();
}
}
Die Klasse TRModell sollte soweit richtig sein diese könnte ich bei Bedarf posten.
Zu meiner Frage:
In der Klasse TRView Zeile 69.
Dort wollte ich die Buttons dem ActionListiner zuordnen doch weiß nicht genau wie ich das anstellen soll ...
auch bin ich mir unsicher mit dem static in Zeile 19-27
wenn ich das Static entferne gibt es Probleme mit der Klasse TRControl..
Ich hoffe ihr könnt mir helfen
Falls ihr Verbesserungsvorschläge habt
immer her damit !
:toll: