Wie findet ihr meinen Vokabeltrainer - Verbesserungsvorschläge?

Bitte aktiviere JavaScript!
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
OK, jetzt wo du es sagst, könnte ich den Code auch hier einfügen (es besteht aus drei Klassen):


Code:
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;

public class Main {

    public static void main(String[] args) {

        List < Vokabeln> liste = new ArrayList<Vokabeln>();   
       
        liste.add(new Vokabeln("großzügig","generous"));
        liste.add(new Vokabeln("reichlich","abundant"));
        liste.add(new Vokabeln("es vermasseln","to blow it"));
        liste.add(new Vokabeln("nachgiebig","indulgent"));
        liste.add(new Vokabeln("geleiten","to usher"));
        liste.add(new Vokabeln("Meuterei", "mutiny"));
        liste.add(new Vokabeln("direkt/unverblühmt","blunt"));
        liste.add(new Vokabeln("machbar","viable"));
        liste.add(new Vokabeln("Hütte","cottage"));
        liste.add(new Vokabeln("bewerten","to assess"));
        liste.add(new Vokabeln("Beerdigung","burial"));
        liste.add(new Vokabeln("bewerben","to apply"));
        liste.add(new Vokabeln("einstellen","to employ"));
        liste.add(new Vokabeln("Verleumdung","slander"));
        liste.add(new Vokabeln("zwielichtig","shaddy"));
        liste.add(new Vokabeln("Erfurcht einflößen","to awe"));
        liste.add(new Vokabeln("einäschern","to cremate"));
        liste.add(new Vokabeln("robust","sturdy"));
        liste.add(new Vokabeln("Matte","mat"));
        liste.add(new Vokabeln("stur","stubborn"));
        liste.add(new Vokabeln("Frontseite/Fassade","frontage"));
        liste.add(new Vokabeln("fleißig", "diligent"));

        JFrame jf = new Frame (liste);
   
    }
}

Code:
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Frame extends JFrame{
   

   
    Font anzeigeSchrift        = new Font("Tahoma", Font.PLAIN, 35);
    Font eingabeSchrift        = new Font("Tahoma", Font.PLAIN, 20);
    Font ergebnisSchrift    = new Font("Tahoma", Font.PLAIN, 20);
   
    JButton wiederholen        = new JButton("Falsche wiederholen");
    JButton go                = new JButton("Go");
   
    JPanel buttonPanel         = new JPanel();
    JPanel panel1             = new JPanel();
    JPanel panel2            = new JPanel();
   
    JLabel neue                = new JLabel("Neue: ");
    JLabel falsche          = new JLabel("Falsch: ");
    JLabel listeNr            = new JLabel();
    JLabel liste2Nr            = new JLabel();
    JLabel anzeige            = new JLabel();
    JLabel ergebnis            = new JLabel();
    JLabel letzteVokabel    = new JLabel();
    JLabel richtigeAntwort    = new JLabel();
   
    JTextField eingabe        = new JTextField();
   
    List <Vokabeln> liste;
    List <Vokabeln> liste2 = new ArrayList<Vokabeln>();   
   
    int nr;
    int nr2 = 0;
    boolean gespeicherte = false;
   
   
   
    Frame(List<Vokabeln> liste)
    {
        this.liste=liste;   
       
        setSize(850,550);
        setResizable(false);
        setVisible(true);
        setLayout(null);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   
        panel1.setBounds(0,0,280,550);
        panel1.setLayout(null);
        panel1.setBackground(Color.BLACK);
        panel1.setVisible(true);
        add(panel1);
       
        panel1.add(ergebnis);
        ergebnis.setBounds(30,150,150,50);
        ergebnis.setFont(ergebnisSchrift);
        ergebnis.setForeground(Color.RED);
       
        panel1.add(letzteVokabel);
        letzteVokabel.setBounds( 30, 200, 150, 50);
        letzteVokabel.setFont(ergebnisSchrift);
        letzteVokabel.setForeground(Color.WHITE);
       
        panel1.add(richtigeAntwort);
        richtigeAntwort.setBounds( 30, 250, 250, 50);
        richtigeAntwort.setFont(ergebnisSchrift);
        richtigeAntwort.setForeground(Color.GREEN);
       
        panel2.setBounds(280,0,600,600);
        panel2.setLayout(null);
        panel2.setBackground(Color.WHITE);
        panel2.setVisible(true);
        add(panel2);
       
        panel2.add(wiederholen);
        wiederholen.setBounds( 175, 496, 175 , 25);
        wiederholen.setBackground(Color.WHITE);
        wiederholen.addActionListener(new WiederListener());
       
        panel2.add(anzeige);
        anzeige.setBounds(50,50,600,200);
        anzeige.setFont(anzeigeSchrift);
       
        panel2.add(eingabe);
        eingabe.setBounds(75, 300, 300, 50);
        eingabe.setFont(eingabeSchrift);
        eingabe.addActionListener(new GoListener());
       
        panel2.add(go);
        go.setBounds(390,300,50,50);
        go.setBackground(Color.WHITE);
        go.addActionListener(new GoListener());
       
        panel2.add(neue);
        neue.setBounds(470,478,50,25);
       
        panel2.add(falsche);
        falsche.setBounds(470,495,50,25);
       
        panel2.add(listeNr);
        listeNr.setBounds(523,478,50,25);
       
        panel2.add(liste2Nr);
        liste2Nr.setBounds(523,495,50,25);
       
        nächsteVokabel();
    }
   
   
    public void nächsteVokabel()
    {
        listeNr.setText(""+liste.size());
        liste2Nr.setText(""+liste2.size());
        eingabe.requestFocus();
        if(liste.size() != 0)
        {
            eingabe.setText("");
            Random würfel = new Random();
            nr=würfel.nextInt(liste.size());
            anzeige.setText(liste.get(nr).eins);
        }   
        else
        {
            eingabe.setVisible(false);
            go.setVisible(false);
            anzeige.setText("Ende");   
        }
    }
   
   
    private class GoListener implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            if(gespeicherte==false)
            {
                if(eingabe.getText().equals(liste.get(nr).zwei))
                {
                    ergebnis.setForeground(Color.WHITE);
                    ergebnis.setText("Richtig!");
                    letzteVokabel.setText("");
                    richtigeAntwort.setText("");
                    liste.remove(nr);
                    nächsteVokabel();
                }
                else
                {
                    ergebnis.setForeground(Color.RED);
                    ergebnis.setText("Falsch!");
                    letzteVokabel.setText(liste.get(nr).eins+":");
                    richtigeAntwort.setText(liste.get(nr).zwei);
                   
                    liste2.add(new Vokabeln(liste.get(nr).eins, liste.get(nr).zwei));
                    liste.remove(nr);
                    nächsteVokabel();
                }
            }
            else
            {
                if(eingabe.getText().equals(liste2.get(nr2).zwei))
                {
                    liste2.remove(nr2);
                    falscheVokabeln();
                    ergebnis.setForeground(Color.WHITE);
                    ergebnis.setText("Richtig!");
                    letzteVokabel.setText("");
                    richtigeAntwort.setText("");
                }
                else
                {   
                    ergebnis.setForeground(Color.RED);
                    ergebnis.setText("Falsch!");
                    richtigeAntwort.setText(liste2.get(nr2).zwei);
                    letzteVokabel.setText(liste2.get(nr2).eins);
                    nr2++;
                    falscheVokabeln();
                }
            }   
        }
    }
   
   
    private class WiederListener implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            ergebnis.setText("");
            letzteVokabel.setText("");
            richtigeAntwort.setText("");
            falscheVokabeln();
        }
    }
   
   
    public void falscheVokabeln()
    {   
        listeNr.setText(""+liste.size());
        liste2Nr.setText(""+liste2.size());
       
        eingabe.setText("");
        go.setVisible(true);
        eingabe.setVisible(true);
       
        if(liste2.size()!=0)
        {
            if(nr2==liste2.size())
                nr2=0;
           
            gespeicherte=true;
            anzeige.setText(liste2.get(nr2).eins);
            eingabe.requestFocus();
        }
        else
        {
            gespeicherte=false;
            nächsteVokabel();
        }
    }
}
Code:
public class Vokabeln
{

    String eins;
    String zwei;

    Vokabeln(String eins, String zwei){
        this.eins=eins;
        this.zwei=zwei;
    }
}
 
Moin,

ich habe den Code jetzt nur überflogen (und nicht ausgeführt) !

Was mir spontan auffiel: vermeide Variablennamen wie
- nr und nr2
- panel1 und panel2
- liste und liste2
Schon bald weißt Du selbst nicht mehr, was 1 und was 2 sein sollte
Immer 'sprechende Namen' verwenden!!

Und bitte was soll ein "WiederListener" sein ???

VG Klaus
 
Hab deinen Code nicht ausprobiert, einfach was mir spontan beim drüber schauen einfällt:
- beachte das Geheimnisprinzip
- Gib deinen Variablen sprechendere Namen zB sagen eins und zwei nicht wirklich etwas über dessen Bedeutung aus
- Du hast momentan 1 Klasse die sich um Logik, tw. Model und View kümmert. Trenne die Klassen lieber auf. Siehe dazu MVC
- Erbe nicht von JFrame - du willst nur dessen Funktionalität nutzen, sie aber nicht erweitern. Oder würdest du für jeden String eine eigene Klasse erstellen :p
- Denk generell vielleicht noch mal über die Datenstruktur nach - ist eine Liste wirklich am geeignetsten? Wäre eine Map vielleicht gut?
- Das null-Layout ist theoretisch verpönt wenn es sich nicht um Spiele handelt. Schau dir vielleicht mal LayoutManager in Java an
- Kleiner Hinweis, kein Muss: if(gespeicherte==false) oder if(gespeicherte==true) kann man auch als if(!gespeicherte) bzw if(gespeicherte) schreiben

Generell ist der Code aber für einen Anfänger (ich impliziere mal, dass du einer bist?) schon gut. Da kann man definitiv drauf aufbauen. Es ist auch nicht so, dass alle Hinweise ein absoluter Muss sind - es sind nur meine Gedanken dazu :)
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben