MenuBar einem Fenster zuweisen

the rusher

Mitglied
Hallo zusammen,

Um gleich zum Punkt zu kommen: ich habe 3 Klassen(Fenster.java, Menu.java, Programmstart.java) die Klasse Menu erstellt eine neue Menubar, die Klasse Fenster ein neues Fenster in welches eine Instanz meiner Menuklasse angezeigt werden soll. Die Klasse Programmstart enthält die Main-Methode und ruft das Fenster auf:

Fenster.java
Code:
import java.awt.*;
import javax.swing.*;

public class Fenster extends JFrame {

	/**
	 * 
	 */
	public Fenster() {
		super("Fenstertitel");
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		setSize(1024,768);
		setLocation( (d.width - getSize().width ) / 2,(d.height- getSize().height) / 2 );
		setResizable(false);
		setMenuBar(new Menu());
		setVisible(true);
		
		/*
		 * TODO Liste: Icon für das Fenster erstellen, sodass Icon angezeigt wird
		 */
	}

	

}

Menu.java
Code:
import java.awt.*;

public class Menu extends MenuBar {
	
	public Hauptmenu() 
	{
		Menu a = new Menu();
		Menu b = new Menu();
		// 1.Menuregister
		a.add((java.awt.Menu) new MenuItem("Neues Spiel"));
		a.add((java.awt.Menu) new MenuItem("Spiel Laden"));
		a.add((java.awt.Menu) new MenuItem("Spiel Speichern"));
		//Separator einfügen;
		a.add((java.awt.Menu) new MenuItem("Spiel beenden"));
		// 2.Menuregister
		b.add((java.awt.Menu) new MenuItem("HTML Hilfe"));
		b.add((java.awt.Menu) new MenuItem("Entwicklerinfos"));
	}

}

Programmstart.java
Code:
public class Programmstart {

	public static void main(String[] args) {
	
		Fenster fenster = new Fenster();
			
	}
}

Beim Ausführen wird zwar das Fenster angezeigt, aber eben ohne Menubar, doch ich hab keinen Schimmer wieso! Ich sollte vielleicht noch anhängen, dass ich Java noch nicht wirklich gut behersche, wahrscheinlich liegt der Fehler also bei mir, doch ich kann ihn nicht finden. Plz help

Ach ja, Entwicklungsumgebung ist Eclipse
 
the rusher hat gesagt.:
Code:
import java.awt.*;

public class Menu extends MenuBar {
	
	public Hauptmenu() 
	{
		Menu a = new Menu();
		Menu b = new Menu();
		// 1.Menuregister
		a.add((java.awt.Menu) new MenuItem("Neues Spiel"));
		a.add((java.awt.Menu) new MenuItem("Spiel Laden"));
		a.add((java.awt.Menu) new MenuItem("Spiel Speichern"));
		//Separator einfügen;
		a.add((java.awt.Menu) new MenuItem("Spiel beenden"));
		// 2.Menuregister
		b.add((java.awt.Menu) new MenuItem("HTML Hilfe"));
		b.add((java.awt.Menu) new MenuItem("Entwicklerinfos"));
	}
}

Du solltest wissen:
Der Konstruktor muss den gleichen Namen haben wie der Klassenname.
Also
Code:
import java.awt.*;

public class Menu extends MenuBar {
	
	public Menu() 
	{ // usw.
sollte es lauten. Wobei der Name Menu für eine eigene Klasse unglücklich gewählt ist.
 
Vielen Dank, für den Hinweis, wenn man zu lange auf den Schirm starrt werden die Augen halt irgendwann müde:)

Warum ist Menu denn ein schlechter Name für die Klasse?

Das Problem ist aber leider noch nicht gelöst, habe die Klasse Menu unterdessen in Hauptmenu umgetauft (Konstruktor natürlich auch), doch wenn ich es ausführen will, bleibt er immer in Zeile 19 (Konstruktor) und 21 stecken. Eigentlich sollte es doch funktionieren, alle Dateien liegen im Packet "gui".

Code:
Exception in thread "main" java.lang.StackOverflowError
	at java.awt.MenuComponent.<init>(Unknown Source)
	at java.awt.MenuBar.<init>(Unknown Source)
	at gui.Hauptmenu.<init>(Hauptmenu.java:19)
	at gui.Hauptmenu.<init>(Hauptmenu.java:21)
 
Zuletzt bearbeitet:
Die Hauptmenu.java

Code:
package gui;

/**
 * @author Tobias
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
import java.awt.*;

public class Hauptmenu extends MenuBar {
	
	public Hauptmenu() 
	{
		Menu a = new Menu();
		Menu b = new Menu();
		// 1.Menuregister
		a.add((java.awt.Menu) new MenuItem("Neues Spiel"));
		a.add((java.awt.Menu) new MenuItem("Spiel Laden"));
		a.add((java.awt.Menu) new MenuItem("Spiel Speichern"));
		//Separator einfügen;
		a.add((java.awt.Menu) new MenuItem("Spiel beenden"));
		// 2.Menuregister
		b.add((java.awt.Menu) new MenuItem("HTML Hilfe"));
		b.add((java.awt.Menu) new MenuItem("Entwicklerinfos"));
	}

}
 
Du willst deinem Menu a ein MenuItem hinzufügen, castest es allerdings als Menu.
Lass mal des "Java.awt.Menu" weg.
 
Ok, hab den Fehler bemerkt, vielen Dank, jetzt nur noch ein "klitzekleines" Problemchen:

Ich hab nun also das java.awt.Menu() entfernt, womit eigentlich ja alles in Ordnung sein sollte, doch von einer MenuBar ist immernoch weit unt breit keine Spur, kann das irgendwie an meiner Java-Umgebung liegen?
 
Zurück