Kleine Optimierungsfrage

Soloeco

Aktives Mitglied
Hey, ich war jetzt länger nicht mehr aktiv und versuche mich wieder ein wenig in Java einzudenken. Ich habe etwas kleines programmiert und meine Frage ist nun was ich an dem folgenden Code optimieren kann.

Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Class extends JFrame {
    //Variablen einfügen
    int stunden;
    int minuten;
    int sekunden;
   
    public static void main(String[] args) {
        //Erzeugen des Fensters beim Ausfürhen der Klasse
        new Class();
    }
   
    public Class() {
        //Fenster definieren
        super("Stoppuhr");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setLayout(null);
        setVisible(true);
       
        stoppuhr();
    }
   
    public void stoppuhr() {
        //Definieren der Variablen
        sekunden = 0;
        minuten = 0;
        stunden = 0;
        //Darstellen der Stoppuhr auf dem Fenster
        final JLabel labelStoppuhr = new JLabel("Zeit: " + stunden + ":" + minuten + ":" + sekunden);
        labelStoppuhr.setBounds(250,25,200,20); //x, y, breite, höhe
        labelStoppuhr.setForeground(Color.BLUE);
        add(labelStoppuhr);
        //Erzeugen des buttons für den Start der Stoppuhr
        final JButton start = new JButton("Starte die Stoppuhr hier");
        start.setSize(180,30);
        start.setVisible(true);
        start.setLocation(20,20);
        start.setEnabled(true);
        add(start);
        //Hinzufügen der Aktion beim Klicken des buttons
        start.addActionListener(new ActionListener() {       
            public void actionPerformed(ActionEvent e) {
                start.setEnabled(false);
                new Timer(1000, new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        //mathematische Zeit
                        sekunden = sekunden + 1;                       
                        if(sekunden == 60)
                            minuten = minuten + 1;                       
                        if(sekunden == 60)
                            sekunden = 0;                       
                        if(minuten == 60)
                            stunden = stunden + 1;                       
                        if(minuten == 60)
                            minuten = 0;
                        //Label der Zeit Anzeige aktualiesieren
                        labelStoppuhr.setText("Zeit: " + stunden + ":" + minuten + ":" + sekunden);                       
                    }                   
                }).start();
            }
        });
    }
}

Falls ihr Vorschläge habt immer her damit, gerne auch mit einer Erklärung dazu, möchte das schließlich auch nachvollziehen können.
Freundliche Grüße
Soloeco :)
 

JStein52

Top Contributor
Wie kommst du darauf dass da etwas zu optimieren wäre ? (mal abgesehen davon dass ich die Klasse nicht Class nennen würde, immer schön sprechende Namen benutzen)
 

Soloeco

Aktives Mitglied
Naja ich habe es noch nicht so ganz mit der Syntax und wo ich aktiver dabei war haben manche z.b. gesagt dass man aus dem frame besser ein eigenes object machen sollte mit JFrame f = new JFrame ... Oder vielleicht kennt ja jemand eine Methode wie man so etwas auf einem einfacheren Weg umsetzen kann.
Und das mit dem Klassennamen werde ich mir merken, danke dir!
 

patklu1988

Mitglied
Wie schon gesagt wurde:

1. Wurde schon gesagt, NAMENSGEBUNG
2. Warum hast Du alles in eine Klasse gepackt? Wenn man das Ganze OOP-mäßig betrachtet, dann würde ich bemängeln, dass:
a) Deine Klasse von JFrame erbt (ist nur in besonderen Fällen nötig)
b) Du kombiniert gerade so ziemlich alles (Stichwort: "MVC")
c) Deine Methode "stoppuhr" (besser: "stoppUhr") -> noch besser auslagern, in eine eigene Klasse, mit eigenen Aufgaben, die vom Rest abgetrennt sind
d) Bleiben wir in der Methode, mal angenommen Punkt c wäre außer Kraft. In dieser Methode tust Du unter anderem Sachen, die nichts mit dem Namen der Methode zu tun haben.
e) ...

3. Auf Kapselung achten. (Soll heißen, dass die 3 Attribute besser private wären)

Spontan war es das erstmal. Wenn ich Dir einen Tipp geben darf: Du scheinst was das eigentliche Verständnis im Umgang im bestimmten Komponenten angeht, nicht "viele" Schwierigkeiten zu haben. Der beste nächste Schritt für Dich wäre: Beschäftige Dich mit OOP, probiere (das half mir damals ungemein) alles in Deiner Umwelt in Klassen und Objekte zu differenzieren. Laufe durch die Gegend und bevor du über nichts oder "belangloses" nachdenkst, versuche alles was Du siehst in Klassen aufzuteilen (anfangs ruhig auch "übertreiben" und allem was irgendwie, aus welchen Gründen auch immer eine Klasse verdient, mit einer Klasse "zu belohnen") und reflektiere dieses Verhalten auf Deine Programme.
Wenn du die Möglichkeit siehst, dass eine Stoppuhr (mit ihrer Logik) nichts in einer GUI zu suchen hat, dann sollte diese da auch nicht rein (was jetzt nicht heißen soll, dass Du so weit gehst, dass Du die Zahlen auf der Stoppuhr auslagerst^^)

Dran bleiben!
 

Soloeco

Aktives Mitglied
Vielen dank @patklu1988 ! Ich werde mit deinen Anmerkungen mal ein wenig herum probieren insbesondere mit deinem Tipp den du zum Schluss hattest.
Kannst du mir Punkt b einmal genauer erläutern, also wie du das meinst, dass ich so ziemlich alles miteinander kombiniere?
 

Soloeco

Aktives Mitglied
Ja ich habe das mal nachgeschlagen, nur ich verstehe das noch nicht so ganz. Generell heißt es ja, dass man mehrere Klassen hat. Wenn ich es richtig verstanden habe sind es quasi eine Klasse, die die Informationen beinhaltet die dargestellt werden sollen, eine weitere Klasse die diese Informationen bearbeitet/auswertet, z.b. auch Eingaben die ausgelesen werden sollen und eine dritte Klasse die dann letztendlich alles ausführt.
Falls ich das falsch verstanden habe gerne verbessern oder einen Link schicken wo ich mir das durchlesen kann (Wenn möglich nicht Wikipedia).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N kleine Kommazahlen erscheinen plötzlich Allgemeine Java-Themen 19
T Kniffel: kleine Straße Allgemeine Java-Themen 6
I GUI für kleine Pop-Ups unter Windows Allgemeine Java-Themen 1
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
RalleYTN Classpath Nur ne kleine Frage zur MANIFEST.MF Allgemeine Java-Themen 4
vandread Kleine Generics Aufgabe aus einer Prüfung... wie ist das gemeint? Allgemeine Java-Themen 6
Y Kleine Frage zu String.split Allgemeine Java-Themen 3
W Kleine Frage zu Null-Pinter-Exception Allgemeine Java-Themen 21
D Kleine Frage zum öffnen eines Fensters Allgemeine Java-Themen 10
A Drucken auf kleine Formate Allgemeine Java-Themen 2
O kleine Fragen eines Anfängers Allgemeine Java-Themen 2
musiKk Best Practice für kleine Variationen in gegebenen Modellklassen Allgemeine Java-Themen 11
nrg Kleine Hilfe mit RegEx Allgemeine Java-Themen 2
L Kleine Rekursion Allgemeine Java-Themen 12
B Kleine Frage zu Modellierung (Videothek) Allgemeine Java-Themen 2
J Eine kleine Aufnahme mit Java Allgemeine Java-Themen 3
J Kleine Hilfe zum Framework Click Allgemeine Java-Themen 2
Lulumann6 kleine frage zu KeyEvents Allgemeine Java-Themen 10
G Kleine Frage zu Vectoren Allgemeine Java-Themen 2
D kleine SQL-Hilfe benötigt: not a single-group group function Allgemeine Java-Themen 4
T Designfrage: Viele, kleine Objekte Allgemeine Java-Themen 13
M Schnell kleine Hilfe gesucht! Allgemeine Java-Themen 3
T kleine mp3 Lib Allgemeine Java-Themen 17
K Mit Java kleine Freeware Programme erstellen. Geht das? Allgemeine Java-Themen 16
L kleine frage zum rechner Allgemeine Java-Themen 7
V kleine Threadfrage Allgemeine Java-Themen 10
T Kleine Verständnisfrage zu Stringbuffer Allgemeine Java-Themen 2
K Kleine Exception Frage ! Allgemeine Java-Themen 3
B Wie heißt dieser kleine Typ links oben? Also dieses JavaVieh Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben