Taschenrechner mit AWT erstellen

morphi79

Erfahrenes Mitglied
Hallo, ich muss folgendes machen:

Erstellen Sie mit Hilfe der Klassen des AWT eine grafische Benutzungsoberfläche,
die einen Taschenrechner darstellt. Am oberen Rand des Taschenrechner-Fensters
soll sich eine Textzeile für die Anzeige von Eingaben und Ergebnissen befinden. Der
Rest des Fensters soll aus einem Tastenfeld bestehen, das dem eines sehr
einfachen Taschenrechners entspricht. Das Programm soll den Namen
CalculatorGUI haben. Die fertige Oberfläche soll wie folgt aussehen:
Diese Hausarbeit beschränkt sich auf die Gestaltung der Oberfläche, die zugehörige
Funktionalität (Reaktionen auf Eingaben) soll nicht implementiert werden. Verwenden
Sie wenn nötig eine Kombination von mehreren Layout-Managern zum Erzielen der
vorgegebenen Fensteraufteilung. Sie können zur Gestaltung der Oberfläche unter
anderem die Klassen Frame, Panel, Button und Label verwenden. Zum Setzen der
Fenstergröße kann die Methode setSize() verwendet werden, deren Argumente die
Breite und die Höhe in Pixeln sind.
Die Klasse CalculatorGUI soll einen Konstruktor besitzen, der alle AWT-Objekte, die
innerhalb des Fensters dargestellt werden sollen, erzeugt. Eine Methode start() soll
ein Fenster mit einer Breite und Höhe von jeweils 200 Pixeln erzeugen, alle
Oberflächenelemente mit den richtigen Layout-Angaben in dieses Fenster einfügen
und schließlich das Fenster sichtbar machen. Die Methode main() soll eine Instanz
der Klasse CalculatorGUI erzeugen und durch Aufruf der Methode start() diese
Instanz die Darstellung der Oberfläche veranlassen.

Soweit so gut. Meine Überlegung ist es, mit einem GridLayout die Tasten für den Taschenrechner festzulegen und mit einem statischen Textfeld die Textausgabe zu steuern.

Bin ich auf dem richtigen Weg? Oder was würdet Ihr empfehlen?
 
so hätte ich mir zumindest mal die Schaltflächen gedacht


Code:
import java.awt.*;
public class CalculatorGUI {
   public static void main(String[] args) {
	  Frame fr = new Frame("CalculatorGUI");
				
	  fr.setLayout(new GridLayout(4, 4));
				
	  Button sevenB = new Button("7");
	  fr.add(sevenB);
	  Button eightB = new Button("8");
	  fr.add(eightB);
	  Button nineB = new Button("9");
	  fr.add(nineB);
	  Button plusB = new Button("+");
	  fr.add(plusB);
	  Button fourB = new Button ("4");
	  fr.add(fourB);
	  Button fiveB = new Button("5");
	  fr.add(fiveB);
	  Button sixB = new Button("6");
	  fr.add(sixB);
	  Button minusB = new Button("-");
	  fr.add(minusB);
	  Button oneB = new Button("1");
	  fr.add(oneB);
	  Button twoB = new Button("2");
	  fr.add(twoB);
	  Button threeB = new Button("3");
	  fr.add(threeB);
	  Button multipleB = new Button("*");
	  fr.add(multipleB);
	  Button nullB = new Button("0");
	  fr.add(nullB);
	  Button pointB = new Button(".");
	  fr.add(pointB);
	  Button equalB = new Button("=");
	  fr.add(equalB);
	  Button differenceB = new Button("/");
	  fr.add(differenceB);
	  fr.pack();
	  fr.setVisible(true);
   }
}
 
Ja, das GridLayout ist eine gute Idee und du bist auf dem richtigen Weg. Allerdings steht in der Angabe, dass du sämtliche GUI-Elemente im Konstruktor von CalculatorGUI erzeugen und eine Methode start() implementieren sollst, sodass in der main-Methode dann ein Statement a la (new CalculatorGUI()).start(); genügt, um den Rechner anzuzeigen. Verschieb deine Statements also in den Konstruktor und überleg dir auf welche Objekte, du auch in anderen Methoden zugreifen möchtest, die müssen dann nämlich Instanzvariablen der Klasse sein. Das Frame selbst ist ein heißer Tip, das wird nämlich vom Konstruktor erzeugt und gefüllt und dann von start() sichtbar gemacht.
 
Zuletzt bearbeitet:
ja das habe ich auch erst gesehen, als ich die sachen schon gemacht habe. aber das ist hoffentlich kein großes problem. passt das mit dem statischen textfeld auch? für die eingabe der tasten sollte dann eine variable gesetzt werden, der die eingaben ausliest und im textfeld dann anzeigt. sehe ich das richtig?
 
Ich seh nur Buttons in deinem Code, ein Label fehlt noch, oder täusch ich mich? Um die Implementierung mußt du dich laut Angabe nicht kümmern. Ansonsten: kommt drauf an, wie komplex dein Rechner werden soll. Bei einem einfachen Rechner wird die Eingabe immer in der Form Zahl - Rechenoperation - Zahl - Ergebnis - Rechenoperation - Zahl - Ergebnis etc. erfolgen, wobei Zahlen (und Ergebnisse :)) immer ausgegeben werden.
 
genau, das mein ich mit statischem textfeld (label). wie setzte ich das label über die buttons? kann mir jemand helfen, wie ich die buttons in einen konstruktor der klasse CalculatorGUI setzen kann, welche ich dann in der main() methode aufrufen kann? Und wie implementiere ich die mehtode start()?
 
Du wirst mit mehreren Layout-Managern arbeiten müssen. Beispiel: verwende ein Panel mit GridLayout, in das du die Buttons setzt und eins z.B. mit FlowLayout, in das das Textfeld (oder Label) kommt. Dem Frame selbst gibst du ein BorderLayout, setzt dann das Panel mit den Buttons in dessen SOUTH-Bereich, das Panel mit dem Textfeld in den CENTER-Bereich. Die start()-Methode enthält vermutlich lediglich ein Statement, um die vom Konstruktor erzeugten Elemente sichtbar zu machen: fr.setVisible();
So, das waren jetzt genügend Tipps ;)
 
im Moment steh ich ein bisschen auf der Leitung... wie soll ich ein FlowLayout mit einem Label kombinieren?
 
was matdacat meinte ist, das du ein panel nehmen sollst, mit einem flowlayout, auf dieses kommt dein textfeld. ein anderes panel hat dein gridlayout mit den buttons etc. dein frame hat ein contentpane(was ein panel ist) mit borderlayout. panel eins wird auf dieses borderlayout gepackt(sued z.b) das andere panel wird auf borderlayout center gepackt....
ein tip noch, schau dir mal auf dem tutorial trail von sun, die gridbag layout lesson an ;-)
 
Das Panel bekommt (z.B.) ein FlowLayout, in dieses Panel kommt dann das Label.

Ähm, ja, genau so, elmato :)
 
Zurück