Swing Vokabeltrainer zeigt in einfacher Ausführung nichts an

Alex2013

Bekanntes Mitglied
Hallo Leute,

ich habe heute einmal angefangen zu versuchen einen Vokabeltrainer zu schreiben.
Dabei habe ich auf mehrere Klassen in einer gesetzt...
Ich habe in einer oberen Klasse, welche die Hauptklasse darstellt erst einmal die innere Struktur erstellt
und in einer unteren Klasse die grafischen Elemente erstellt.
Diese untere Klasse, welche die Grafikelemente beinhaltet ist jedoch innerhalb der Hauptklasse eingeschlossen. Also der oberen Klasse.
Ich rufe also in der main in der oberen Klasse, den Konstruktor der Grafikklasse auf welcher in einer anderen Klasse, aber innerhalb der Hauptklasse steht.
Hat einer von euch eine Idee weshalb das Programm nicht starten möchte?
Sollte ich evtl. die untere Klasse komplett in eine neue Klasse schreiben? (neue Klasse erstellen)
Oder hat jemand einen anderen Tipp?
Ich möchte das Programm erst einmal recht einfach halten bis es funktioniert und anschließend weiter ausbauen...

Falls ihr den Code sehen möchtet:

Java:
[code]
import java.awt.Container;
import java.awt.GridLayout;
import java.util.Random;

import javax.print.attribute.standard.DateTimeAtCreation;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;


public class Vokabeltrainer1 
{
	Vokabel vok[]=new Vokabel[3];
	Vokabel aktuelleVok;
	Random rd=new Random();
	
	class Vokabel
	{	//Die Variablen werden deklariert
		String deutschesWort;
		String englischesWort;
		int zahlKorrekterAbfragen;
		int zahlFalscherAbfragen;
		DateTimeAtCreation letzteAbfrage;
		
		//Konstruktor
		public Vokabel(String deutschesWort, String englischesWort)
		{
			this.deutschesWort=deutschesWort;
			this.englischesWort=englischesWort;
		}
	}
	
	public Vokabeltrainer1()
	{	//Dem Konstruktor Vokabeltrainer welcher eine Ebene höher liegt übergebe ich die erstellten Vokabeln + die aktuelle Vokabel die angezeigt werden soll
		vok[0]=new Vokabel("Familie","family");
		vok[1]=new Vokabel("Bruder","brother");
		vok[2]=new Vokabel("Schwester","sister");
		
		aktuelleVok=vok[0];
		//Vokabeltrainer_bedienen.this.abfrage.setText(""+aktuelleVok);
	}
	
	public static void main(String [] args)
	{
		new Vokabeltrainer_bedienen();
		//Vokabeltrainer_bedienen.this.abfrage.setText(""+Vokabel.class.getEnclosingMethod(aktuelleVok));
	}
	
	class Vokabeltrainer_bedienen extends JFrame
	{	//in der oberen Klasse welche diese miteinschließt habe ich sozusagen die inneren Strukturen festgelegt
		//in dieser Klasse baue ich nur das Grafikgerüst auf um dann anschließend in der main der oberen Klasse den Konstruktor der unteren Grafik-
		//klasse aufzurufen. es ist etwas durcheinander, aber die Hauptklasse ist die public Vokabeltrainer1, welche nur eben im KOnstruktor nicht aufgerufen wird
		//Hat jemand von euch einen Vorschlag zur Verbesserung?
		JLabel abfrage;
		JButton pruefe;
		JTextField eingabe;
		Container c;
		private static final long serialVersionUID = 1L;
		
		public Vokabeltrainer_bedienen()
		{
			c=getContentPane();
			setTitle("Vokabeltrainer");
			setLayout(new GridLayout(3,1));
			setSize(300,400);
			setLocation(200,200);
			abfrage=new JLabel("---");
			c.add(abfrage);
			eingabe=new JTextField(10);
			c.add(eingabe);
			pruefe=new JButton("pruefen!");
			c.add(pruefe);
			setVisible(true);
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		}
		
		
		
	}
}
[/code]

Hat jemand einen Vorschlag? Sollte ich alles auslagern? oder bedarf es vlt. auch nur einer kleinen Änderung?

Für Tipps wäre ich dankbar.

Lg
 
Auslagerung wäre schon mal eine Option. Klassen werden in der Regel ausgelagert.Vielleicht klappt es dann schon.

Was wird denn angezeigt? Welche Fehlermeldung bekommst du?
 
Also je nachdem:

Ich habe die main gerade einmal in die untere Grafikklasse verschoben um dort in Kunstruktor aufzurufen, dann meldet mir Eclipse folgenden Fehler: Fehler: Hauptmethode in Klasse Vokabeltrainer1 nicht gefunden. Definieren Sie die Hauptmethode als:
public static void main(String[] args)


Wenn ich main in der oberen Hauptklasse belasse, welche ja auch die untere Grafikklasse innehat, dann meldet mir Eclipse bei Aufruf des Konstruktors: new Vokabeltrainer_bedienen();
diesen Fehler:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
No enclosing instance of type Vokabeltrainer1 is accessible. Must qualify the allocation with an enclosing instance of type Vokabeltrainer1 (e.g. x.new A() where x is an instance of Vokabeltrainer1).

at Vokabeltrainer1.main(Vokabeltrainer1.java:48)

und wenn ich den Konstruktor new Vokabeltrainer1(); aufrufe, dann meldet mir Eclipse keinen Fehler mehr. Ich schätze das liegt, daran, dass oben alles sauber erstellt wird und er nur Probleme mit der unteren Grafikklasse hat...




jetzt gar keinen Fehler mehr...
 
Du hast mehrere Klassen ineinander verschachtelt. Die main-Methode muss immer die äußerste Klasse aufrufen, weil es ohne sie die inneren Klassen nicht geben kann.
 
Ich frage mich, wieso ich da nicht eher drauf gekommen bin, sondern gefragt habe...
Aber naja, wenn man mal nicht weiß woran es liegt, fragt man halt mal nach...
Ich habe jetzt den Konstruktoraufruf in den Konstruktor der Huaptklasse gepackt und anschließend kompiliert und siehe da, ich sehe etwas... ;-)
jetzt muss ich nur noch die Funktionen erstellen und zuweisen und dann mal weiter sehen.

Danke schon mal bis hierhin 🙂
 

Zurück
Oben