Bitte über Überprüfung meines Codes

AlexWage

Neues Mitglied
Guten Tag, Lieber Leute, ich bitte Sie mein Code zu überprüfen, was ich kann Korrigieren oder verbessern, Vielen Dank für Hilfe
Ich benutze Eclipse.
Windows 11 pro

Das Ziel, für den User ein Menu aufblenden, wo er die Größe Kreises festlegen kann, nach dem Button wird gedrückt die Werte soll von Programm übernommen werden und Kreis in einem getrenntem JFrame soll angezeigt werden

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

public class Geometrie extends JFrame implements ActionListener{

    JButton button1;

    JTextField field1;
    JTextField field2;

    JPanel panel;

    JLabel label;


    public Geometrie() {
        this.setTitle("Fenstertitel");
        this.setSize(400,200);


        field1 = new JTextField();
        field2 = new JTextField();

        button1 = new JButton("Daten Eingabe");

        //wir wollen button ActionLiostener zuordnen
        button1.addActionListener(this);

        label = new JLabel();
        panel = new JPanel();

        panel.add(button1);
        panel.add(label);

        this.add(panel);

    }
    public void main(String [] args) {

        Geometrie aufbauen = new Geometrie();
        aufbauen.setVisible(true);
    }
    public void actionPerformed(ActionEvent e) {

        if(e.getSource()==this.button1) {
            String eingabe1=field1.getText();
            int x = Integer.parseInt(eingabe1);
            String eingabe2 = field2.getText();
            int y = Integer.parseInt(eingabe2);}

    }


    public void paintComponent(Graphics g,int a,int b) {

        Graphics2D g2d = (Graphics2D)g;{
            g2d.drawOval(20,20,a,b);
        }
    }
}

Moderator Edits: 1. Code Tags + Formatierung, 2. Fenstertitel ersetzt
 
Zuletzt bearbeitet von einem Moderator:

mihe7

Top Contributor
Lieber Leute, ich bitte Sie mein Code zu überprüfen, was ich kann Korrigieren oder verbessern, Vielen Dank für Hilfe
Was hat der Code mit der Aufgabenstellung zu tun? Warum hat main kein static? Was sind das für Bezeichner? Wo werden die Eingabefelder angezeigt? Was soll der Fenstertitel?

Nachtrag: und drück mal Strg+Shift+F in Eclipse, damit der Code wenigstens anständig formatiert wird.
 

KonradN

Super-Moderator
Mitarbeiter
Der erste wichtige Punkt: Code bitte immer in Code Tags posten (den Knopf </> links oberhalb des Eingabebereichs). Ich habe einmal für Dich Deinen Post diesbezüglich angepasst.

was ich kann Korrigieren oder verbessern
Als erster wichtiger Punkt ist natürlich die Funktionalität zu nennen. Dein Code macht ja offensichtlich nicht, was Du erwartest.

1. Die main Methode sollte public static void sein -> da fehlt also das static
2. Du erzeugst zwei Felder aber fügst die dem Panel nicht hinzu
3. Du hast paintComponent zwei zusätzliche Parameter gegeben. Damit wird die natürlich nicht mehr aufgerufen. Damit macht die Methode nichts ... Und Du überschreibst JFrame - da hast Du keine paintComponent ... evtl. willst Du paint oder paintComponents überschreiben ... Aber normalerweise überschreibt man ein JPanel oder so.
4. du liest die Werte aus den Feldern in lokale Variablen. Damit hast Du die Werte natürlich nicht dauerhaft zur Verfügung.

Du kannst also die Variablen x und y zu Instanzvariablen machen und diese dann in paint verwenden.

Wenn Du Punkte behoben hast und dann auch noch
5. Nach umsetzen der Werte sollte ein repaint() aufgerufen werden, damit neu gemalt wird.
umsetzt, dann sollte es schon funktionieren.

Dann kommen noch paar "Nice to have": Statt ActionListener zu implementieren und this als ActionListener zuzuweisen, kannst Du das auch alles rein lokal machen. Dann kannst Du die actionPerformed so umbenennen, dass der Name aussagt, was sie macht, also etwas wie:
Java:
    public void setValuesFromFieldsAction(ActionEvent e) {
        String eingabe1=field1.getText();
        x = Integer.parseInt(eingabe1);
        String eingabe2 = field2.getText();
        y = Integer.parseInt(eingabe2);
    }
und eingetragen wird es z.B. per Methodenreferenz: button1.addActionListener(this::setValuesFromFieldsAction);

Und wenn man eine Methode überschreibt, dann sollte man die Annotation @Override verwenden - dann prüft der Compiler, ob das so korrekt ist.

Und zu guter letzt: Der Name des Titels sollte überdacht werden ...
 

AndiE

Top Contributor
Ich würde ja erst mal an der Struktur arbeiten. Java ist klassenbasiert, also sollte man das Programm auch auf solche aufteilen. Ob man bei Grafikprogrammen erbt, ist so eine Frage, die unterschiedlich gehandhabt wird. Ich bin kein Freund davon, weil man ja die Klasse nicht wirklich "erweitert". Am besten ist es, schon früh die Richtlinien für Namensbezeichnungen zu berücksichtigen.

Eine Klasse hat als solche auch ein Substantiv als Name, das man in der Regel groß schreibt. Ich fände beim Lesen für GUI-Elemente z.B. "xWert" hilfreich, obwohl das nicht ganz sauber bezeichnet ist. Variablen sind in der Regel kleingeschriebene Substantive. Nur bei Methoden kenne ich das CamelCase, wo man aber mit einem Verb beginnt: holeWert() wäre so eine Bezeichnung.

Ansonsten ist von einfachen Buchstaben als Bezeichner abzuraten. Bei längeren Programmen und vielen Variablen kommt man sonst total durcheinander.
 

Neue Themen


Oben