Verbesserungsvorschläge?! Kleines AWT Programm

Hallo!

ich bin ein Java (und Foren)-Neuling. Habe mich nun seit einiger Zeit mit Java beschäftigt und nun ein kleines Programm geschrieben, das eine leichte Matheaufgabe stellt und mit den Ergebnissen eben umgehen muss. Mir geht es hauptsächlich um den AWT-Part.
Da ich, wie gesagt, keine Erfahrung habe und versuche mich zu verbessern, würde ich den Code gerne reinstellen und mal hören, was Ihr meint: wo etwas schlecht ist, was eleganter wäre usw. Die Mainklasse schenke ich mir, die ruft nur die Fenster-Klasse auf. Bin über Anregungen sehr dankbar. Auch über Tipps, wie man nach den ersten Schritten weitermacht, um sich zu verbessern und "professioneller" zu werden.

Gruß

Java:
import java.awt.*;
import java.awt.event.*;

@SuppressWarnings("serial")
public class Fenster extends Frame {
    private Panel panel1, panel2;
    private Button button1, button2, button3;
    static public TextField eingabe;
    private Label label1;
    private Label label2;
    private int a, b;

    Fenster() {
        //Initalisieren des Fensters
        super();
        this.setLayout(new GridLayout(3, 1));
        this.setSize(400, 400);
        this.setLocation(700, 400);

        //Aufbau des Fensters
        //Erstes Panel mit Text und Aufgabe       
        panel1 = new Panel(new GridLayout(2, 1));
        label1 = new Label("Matheaufgaben", Label.CENTER);
        label2 = new Label("Zum Starten ´Neue Aufgabe´ drücken", Label.CENTER);
        panel1.add(label1);
        panel1.add(label2);
       
        //EingabeFeld
        eingabe = new TextField(23);
       
        //Zweites Panel (drittes Element) mit den 3 Buttons
        panel2 = new Panel();
        button1 = new Button("NeueAufgabe");
        button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                neueAufgabe();
            }
        });
        /*Abdeckung der 3 Möglichkeiten:
         * 1. Falsche Eingabe
         * 2. korrekte Lösung
         * 3. falsche Lösung aber korrekte Eingabe
         * als Actionhandling wird immer das AntwortFenster aufgerufen in einer
         * anonymen Klasse
         */
        button2 = new Button("Lösung");
        button2.addActionListener(new ActionListener() {
            int c;
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    c = Integer.parseInt(eingabe.getText());
                } catch (NumberFormatException keineZahl) {
                    AntwortFenster antfenster = new AntwortFenster();
                    antfenster.antButton.setLabel("Nochmal");
                    antfenster.antLabel.setText("Falsche Eingabe");
                    antfenster.setVisible(true);
                    return;
                }
                if ((a + b) == c) {
                    AntwortFenster antfenster = new AntwortFenster();
                    dispose();
                    antfenster.antButton.setLabel("Nächste Aufgabe");
                    antfenster.antLabel.setText("Korrekt");
                    antfenster.setVisible(true);

                } else {
                    AntwortFenster antfenster = new AntwortFenster();
                    antfenster.antButton.setLabel("Nochmal");
                    antfenster.antLabel.setText("Falsch");
                    antfenster.setVisible(true);
                }
            }
        });
        button3 = new Button("Ende");
        button3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                System.exit(0);
            }
        });
   
        panel2.add(button1);
        panel2.add(button2);
        panel2.add(button3);
       
        //Hinzufügen ins Frame
        this.add(panel1);
        this.add(eingabe);
        this.add(panel2);
   

        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

    }
    /*Erzeugt die Zufallszahlen, fügt sie in das Label ein
     *und leert das Textfeld
     */
    public void neueAufgabe() {
        a = (int) (Math.round(Math.random() * 10) + Math
                .round(Math.random() * 10));
        b = (int) (Math.round(Math.random() * 10) + Math
                .round(Math.random() * 10));
        String s = (a + " + " + b);
        label2.setText(s);
        eingabe.setText("");

    }

}

Java:
import java.awt.*;
import java.awt.event.*;

@SuppressWarnings("serial")
public class AntwortFenster extends Frame {

    Button antButton;
    Label antLabel;

    AntwortFenster() {
        super();
        this.setSize(300, 100);
        this.setLocation(750, 400);
        Panel panel = new Panel();
        antButton = new Button();
        antLabel = new Label();
        panel.add(antLabel);
        panel.add(antButton);
        this.add(panel);
        antButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (e.getActionCommand() == "Nächste Aufgabe") {
                    dispose();
                    Fenster fenster = new Fenster();
                    fenster.neueAufgabe();
                    fenster.setVisible(true);
                } else {
                    Fenster.eingabe.setText("");
                    dispose();
                }
            }
        });
    }
}
 

Joose

Top Contributor
was Ihr meint: wo etwas schlecht ist, was eleganter wäre usw.

Ist es Absicht dass du mit AWT arbeitest anstatt mit Swing? Ich würde dir raten mit Swing weiterzumachen (das baut auf AWT auf und hat mehr Möglichkeiten).

Zu deinem Code:
Du solltest nicht von einer Klasse ableiten wenn du nicht vorhast deren Funktionalität zu erweitern, sondern nur ein Objekt von ihr brauchst. Also anstatt von Frame abzuleiten erstelle einfach ein Frame Objekt und arbeite mit diesem.

Vergib deinen Komponenten sprechendere Namen als "button1" (->newTask), "button2" (->resolve) bzw. "button3" (-> exit). Ob du bei den Namen dann noch "button" bzw. "label" dranhängst ist so eine Sache.
Manche meinen so kann man schneller sehen um was es sich handelt, andere meinen der Name sollte schon sprechende genug sein.

Der Aufruf von super() ist in diesem Fall unnötig. Da der Defaultkonstruktor der Superklasse automatisch aufgerufen wird (gibt es keinen Defaultkonstruktor würdest du einen Fehler angezeigt bekommen).
Da die Ableitung von Frame hinfällig ist, ist auch der Aufruf hinfällig.

Vermeide "static" in deinem Code. Vor allem um auf ein bestimmtes Control aus einer anderen Klasse zuzugreifen ist das der falsche Weg.
Übergib lieber eine Referenz dieses Control an die andere Klasse.

Objekte (String ist auch ein Objekt) werden inhaltlich mit equals verglichen, mit == vergleichst du nur die Referenz!

Du solltest den Zugriff auf die Komponenten des AntwortFenster über Methoden regeln und keinen direkten Zugriff zulassen.
Auch erstellst du immer ein neues Fenster bzw. AntwortFenster. Verwende lieber schon die vorhandenen Objekte.

Beispiel:
Java:
public class Fenster extends Frame {
   ....
    private TextField eingabe;
  
   private AntwortFenster antwort;

    Fenster() {
        this.setLayout(new GridLayout(3, 1));
        this.setSize(400, 400);
        this.setLocation(700, 400);

       ......
    
        //EingabeFeld
        eingabe = new TextField(23);
       antwort = new AntwortFenster(this);
      
       ....
      
        button2 = new Button("Lösung");
        button2.addActionListener(new ActionListener() {
            int c;
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    c = Integer.parseInt(eingabe.getText());
                } catch (NumberFormatException keineZahl) {
                   antwort.setData("Nochmal", "Falsche Eingabe");
                   antwort.setVisible(true);
                    return;
                }
               .....
            }
        });
       .......
    }
  
   public TextField getEingabe() {
       return eingabe;
   }
}

public class AntwortFenster extends Frame {
    private Button button;
    private Label label;
   private Fenster fenster;
  
    AntwortFenster(Fenster fenster) {
       this.fenster = fenster;
       fenster.setVisible(false);
       ....
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (e.getActionCommand().equals("Nächste Aufgabe")) {
                    setVisible(false);
                   fenster.neueAufgabe();
                    fenster.setVisible(true);
                } else {
                   fenster.getEingabe().setText("");
                    setVisible(false);
                }
            }
        });
    }
  
   public void setData(String buttonText, String labelText) {
       button.setLabel(buttonText);
       label.setText(labelText);
   }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B AWT einfache Stoppuhr -Verbesserungsvorschläge AWT, Swing, JavaFX & SWT 2
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
J Kleines Helikopterspiel programmieren AWT, Swing, JavaFX & SWT 2
T Kleines Infofenster einblenen lassen AWT, Swing, JavaFX & SWT 3
J Kleines Anzeige Problem(nur blanker Frame) AWT, Swing, JavaFX & SWT 22
F Kleines Fenster am Bildschirmrand AWT, Swing, JavaFX & SWT 3
C Swing Kleines Programm mit SWING unter Verwendung von MVC AWT, Swing, JavaFX & SWT 5
L Kleines Lückenprogrämmchen AWT, Swing, JavaFX & SWT 3
C kleines Chatprogramm, probleme mit JTextArea AWT, Swing, JavaFX & SWT 9
R JTable Header - will links kleines icon hinzufuegen..? AWT, Swing, JavaFX & SWT 6
D Swing Ein kleines Formatierungsproblem AWT, Swing, JavaFX & SWT 9
F kleines problem beim suchen in einem String AWT, Swing, JavaFX & SWT 15
T Ein kleines buntes Farbproblem AWT, Swing, JavaFX & SWT 7
V Thread als kleines splash AWT, Swing, JavaFX & SWT 13
C Mein erstes kleines Swing-Projekt - Probleme AWT, Swing, JavaFX & SWT 8
H Kleines SwingProgramm Frage AWT, Swing, JavaFX & SWT 14
H Kleines Malprogramm AWT, Swing, JavaFX & SWT 36
J kleines Zeichenprogramm AWT, Swing, JavaFX & SWT 12
J Kleines Layout Problem AWT, Swing, JavaFX & SWT 5
B Kleines JFrame Problem (oder doch größer?) AWT, Swing, JavaFX & SWT 2
P Warum braucht mein kleines Programm 20 MB Speicher? AWT, Swing, JavaFX & SWT 13
D Kleines aber dummes Problem mit Turtle. AWT, Swing, JavaFX & SWT 4
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
G CAD Programm AWT, Swing, JavaFX & SWT 4
thor_norsk E - Mail Programm AWT, Swing, JavaFX & SWT 2
_user_q Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1
J Programm findet Resource nicht. AWT, Swing, JavaFX & SWT 6
N Programm Läuft nicht auf anderen Pcs AWT, Swing, JavaFX & SWT 9
imawake Java Paket-Tracking Programm 📦 AWT, Swing, JavaFX & SWT 7
S Lustiges programm schnell coden? AWT, Swing, JavaFX & SWT 2
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
M DragAndDrop - aus Browser ins Programm AWT, Swing, JavaFX & SWT 6
T Java GUI - Würfel Programm AWT, Swing, JavaFX & SWT 6
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
I Gui in bestehendes Java-Programm AWT, Swing, JavaFX & SWT 11
L JavaFX IntelliJ Standalone Programm exportieren AWT, Swing, JavaFX & SWT 9
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
M AWT Programm in den Tray minimieren AWT, Swing, JavaFX & SWT 2
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
A Java Programm gestalten AWT, Swing, JavaFX & SWT 4
P Swing Warum startet das Programm nicht? AWT, Swing, JavaFX & SWT 3
J JavaFX Kamera im Programm öffnen AWT, Swing, JavaFX & SWT 6
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
Arif Swing Programm friert ein... AWT, Swing, JavaFX & SWT 2
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
G Programm GUI erstellen AWT, Swing, JavaFX & SWT 5
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
T Programm im METRO Design? AWT, Swing, JavaFX & SWT 1
J Programm hängt sich bei Log In auf AWT, Swing, JavaFX & SWT 1
C Programm mit Passwort schließen AWT, Swing, JavaFX & SWT 5
D Robot Programm mit Escape abbrechen (aus Eclipse heraus) AWT, Swing, JavaFX & SWT 2
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
J Programm im GUI ausführen AWT, Swing, JavaFX & SWT 4
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
S Event Handling konsole Programm mit Tastendruck beenden AWT, Swing, JavaFX & SWT 5
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
F Mal Programm AWT, Swing, JavaFX & SWT 13
C In Hauptfenster Programm-Klassen implementieren AWT, Swing, JavaFX & SWT 9
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
C Swing Wie kann ich im Programm das Menü schließen AWT, Swing, JavaFX & SWT 2
J SWING - Programm ohne Eclipse etc. starten AWT, Swing, JavaFX & SWT 7
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
M Programm in Jframe "einbinden" AWT, Swing, JavaFX & SWT 7
S Programm auf aktuellen Stand bringen AWT, Swing, JavaFX & SWT 2
Spin Tool: Popup -Programm AWT, Swing, JavaFX & SWT 3
GUI-Programmer Swing JWindow - Programm wird ohne Grund beendet AWT, Swing, JavaFX & SWT 3
E Kreis-Mal-Programm AWT, Swing, JavaFX & SWT 7
P Programm aktuallisiert sich nur beim Rüberzeigen AWT, Swing, JavaFX & SWT 6
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
J Programm schließen AWT, Swing, JavaFX & SWT 4
J Programm nur einmal öffnen AWT, Swing, JavaFX & SWT 3
E Windows Kontext Menü - Laufendes Programm AWT, Swing, JavaFX & SWT 3
T Programm vom Desktop starten! AWT, Swing, JavaFX & SWT 2
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
M Browser in Programm einbinden AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
H Userinput in GUI an externes Programm AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben