Hallo allerseits,
Das folgende Programm soll ein einfacher Taschenrechner sein, der 2 Zahlen addiert.
Habe versucht dies mit dem Entwurfsmuster MVC zu machen.
Leider funktioniert der Listener nicht, d.h. bei einem Klick auf den Button + wird nicht die Methode actionPerformed aufgerufen.
Habe dies mit einer inneren, anonymen Klasse versucht.
Kann mir jemand sagen, warum dies nicht geht und was ich ändern muss, damit es geht ?
mfg
Ernst
Das folgende Programm soll ein einfacher Taschenrechner sein, der 2 Zahlen addiert.
Habe versucht dies mit dem Entwurfsmuster MVC zu machen.
Leider funktioniert der Listener nicht, d.h. bei einem Klick auf den Button + wird nicht die Methode actionPerformed aufgerufen.
Habe dies mit einer inneren, anonymen Klasse versucht.
Kann mir jemand sagen, warum dies nicht geht und was ich ändern muss, damit es geht ?
mfg
Ernst
Java:
package MainTaschenrechnermvc10;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class TaschenrechnerMVC10 {
public static void main(String[] args) {
TRController trController = new TRController();
TRView trView = new TRView();
trView.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class TRModel{
private double sum;
public TRModel(){
reset();
}
public void addiere(double wert1, double wert2){
sum = wert1 + wert2;
}
public void reset(){
sum = 0;
}
public double getSumme(){
return sum;
}
}
class TRView extends JFrame{
// Stelle in MyFenster deklarieren, an die montiert wird.
private Container mycont;
// Buttons deklarieren
private JButton mybtPlus;
// Textfelder deklarieren
private JTextField mytfZahl1;
private JTextField mytfZahl2;
private JTextField mytfErg;
private JLabel dummyLabel1;
private JLabel dummyLabel2;
// Eine Zeichenfläche deklarieren
private JPanel myp;
private GridLayout myGL23;
// Konstruktor
public TRView(){
// Liefert die Stelle in MyFenster, an die montiert wird.
mycont = getContentPane();
// Erzeugt jeweils ein Button
mybtPlus=new JButton("+");
// Erzeugt jeweils ein einzeiliges Textfeld mit dem vorgegebenen
// Text und der vorgegebenen Spaltenzahl. Dieser Text kann
// (im Gegensatz zu einem Label) editiert werden
mytfZahl1=new JTextField("hier 1. Zahl eingeben",30);
mytfZahl2=new JTextField("hier 2. Zahl eingeben",30);
mytfErg=new JTextField("hier kommt das Ergebnis",30);
// Ein paar Dummy Labels
dummyLabel1 = new JLabel();
dummyLabel2 = new JLabel();
// Erzeugt jeweils ein Label (Beschriftung) mit dem vorgegebenen
// Text Dieser Text kann (im Gegensatz zu einem Textfeld) nicht
// editiert werden
// Erzeugt eine Zeichenfläche
myp = new JPanel();
// Erzeugt ein Layout
myGL23 = new GridLayout(2,3);
// Ordnet das Layout der Zeichenfläche (Panel) myp zu
// ("formatiert" die Zeichenfläche damit)
myp.setLayout(myGL23);
// Montiert die grafischen Komponenten in die Zeichenfläche
myp.add(mytfZahl1);
myp.add(mytfZahl2);
myp.add(mytfErg);
myp.add(mybtPlus);
myp.add(dummyLabel1);
myp.add(dummyLabel2);
// Montiert die Zeichenfläche in das Fenster MyFenster
mycont.add(myp);
// Fensterüberschrift festlegen
setTitle("Einfaches MVC");
// Koordinaten des linken, oberen Ecks des Fensters festlegen
// Koordinate x = 30, Koordinate y = 60.
setLocation(30,60);
// Die Breite des Fensters in x-Richtung = 600
// Die Breite des Fensters in y-Richtung = 400
setSize(600,400);
// Macht das Fenster sichtbar
setVisible(true);
}
public String getJTextField1(){
return mytfZahl1.getText();
}
public String getJTextField2(){
return mytfZahl2.getText();
}
public String getJTextFieldErg(){
return mytfErg.getText();
}
public void setJTextField1(String str){
this.mytfZahl1.setText(str);
}
public void setJTextField2(String str){
this.mytfZahl2.setText(str);
}
public void setJTextFieldErg(String str){
this.mytfErg.setText(str);
}
public void setAdditionsListener(ActionListener l){
mybtPlus.addActionListener(l);
}
}
class TRController{
private TRView trView;
private TRModel trModel;
public TRController(){
trView = new TRView();
trModel = new TRModel();
addListener();
}
public void addListener(){
trView.setAdditionsListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
double wert1 = Double.valueOf(trView.getJTextField1());
double wert2 = Double.valueOf(trView.getJTextField2());
trModel.addiere(wert1, wert2);
trView.setJTextFieldErg(String.valueOf(trModel.getSumme()));
System.out.println("Hallo");
}
});
}
}
Zuletzt bearbeitet von einem Moderator: