JMenueBar

Soledad

Grünschnabel
Hallo,

ich bin ein Java Neuling und probiere mich gerade an meinem ersten Fenster.
Mein Problem ist jetzt, dass wenn ich auf ein MenuItem,wie zum Beispiel Beenden, klicke nichts passiert. Das Fenster bleibt immer noch bestehen. Ich kann aber keinen Fehler erkennen, könnte mir da jemand behilflich sein?
Danke schon einmal im voraus!


package fensterina;




import java.awt.*;
import java.awt.event.*;

import javax.*;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.WindowConstants;




public class Fenster extends JFrame implements ActionListener, WindowListener
{
JPanel jp1, jp2, jp3, jp4, jp5; // Panels für unser Fenster

private Spielregeln spielregeln;
private AboutUs aboutUs;
private JPanel pane = new JPanel();




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



public Fenster()
{
this.setSize(800,600 );
this.setLocation(100, 100);
this.setTitle("Memory");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);






//Panels erzeugen
jp1 = new JPanel();
jp2 = new JPanel ();

jp3 = new JPanel ();
//Größe des Panels und Hintergrundfarbe
jp3.setPreferredSize(new Dimension(50,10));
jp3.setBackground(Color.magenta);


jp4 = new JPanel();
jp4.setPreferredSize(new Dimension(50,50));
jp4.setBackground(Color.black);


//Abstand der Karten 5,5
jp5 = new JPanel (new GridLayout(4,4));

//Vier Tasten in Panel 1 einfuegen
for (int i=1; i<=3; i++)
jp1.add(new JButton("Panel" + i));

for (int i=1; i<17; i++)
jp5.add(new JButton());
jp5.setVisible(true);


//Panels in den Container einfuegen
this.add(jp1, BorderLayout.WEST);
this.add(jp2, BorderLayout.SOUTH);
this.add(jp3, BorderLayout.EAST);
this.add(jp4, BorderLayout.NORTH);
this.add(jp5, BorderLayout.CENTER);


//Menuebar
JMenuBar dieMenueleiste = new JMenuBar();

JMenu menue1 = new JMenu("Spiel");
menue1.add("Neues Spiel");
menue1.add("Highscore");
menue1.addSeparator();
menue1.add("Beenden");
menue1.addActionListener(this);
addWindowListener(this);



JMenu menue2 = new JMenu("Optionen");
menue2.add("Level 1");
menue2.add("Level 2");
menue2.add("Abbrechen");

JMenu menue3 = new JMenu("?");
menue3.add("Spielregeln");
menue3.add("About Us");
menue3.addActionListener(this);
addWindowListener(this);
menue3.addActionListener(this);
addWindowListener(this);

dieMenueleiste.add(menue1);
dieMenueleiste.add(menue2);
dieMenueleiste.add(menue3);

//hinzufügen der Menüleiste zum Fenster
this.setJMenuBar(dieMenueleiste);
this.setVisible(true);
}



public void actionPerformed(ActionEvent evt)
{
String actionCommand = evt.getActionCommand();

Object source = evt.getSource();


if (actionCommand.equals("Beenden"));
{
System.exit(0);
}


if (actionCommand.equals("Spielregeln") )
{
getInstanceSpielregeln().setVisible(true);
}

if (actionCommand.equals("About Us") )
{
getInstanceAboutUs().setVisible(true);

}
}







public Spielregeln getInstanceSpielregeln()
{
if (spielregeln==null)
{
spielregeln= new Spielregeln();
}
return spielregeln;
}

public AboutUs getInstanceAboutUs()
{
if (aboutUs==null)
{
aboutUs= new AboutUs();
}
return aboutUs;
}

public void windowClosing(WindowEvent evt)
{
System.exit(0);
}



public void windowOpened(WindowEvent evt){}
public void windowIconified(WindowEvent evt){}
public void windowDeiconified(WindowEvent evt){}
public void windowClosed(WindowEvent evt){}
public void windowActivated(WindowEvent evt){}
public void windowDeactivated(WindowEvent evt){}
}
 
Ersetz das:
menue1.add("Beenden")

durch das:
menue1.add("Beenden").addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});

So funktioniert es, ganz glücklich bin ich mit deinem Code aber nicht.
Mach lieber für jeden Menueintrag ein JMenuItem und und die ordnest du dann dem jewailigen JMenu zu. Auserdem erstellst du am Besten für jeden Menueintrag einen eigenen ActionListener.
 
Hallo!

Danke erst einmal für die Antwort. Jetzt klappt es zum Glück! :)
Ich habe da aber noch einmal eine Frage. Warum muss ich denn extra noch einmal ein JMenuItem erstellen? Reicht es nicht, wenn ich nur einfach spiel.add() schreibe? Für das Fenster ist es im Endeffekt egal,oder? Hatte es jetzt wie folgt geschrieben. War es das, was du meintest? Wenn ja, dann verstehe ich den Unterschied nicht. Ist es syntaktisch korrekter geschrieben?

JMenuBar dieMenueleiste = new JMenuBar();

JMenu spiel = new JMenu("Spiel");

JMenuItem neuesSpiel = new JMenuItem("Neues Spiel");
spiel.add(neuesSpiel);
JMenuItem highscore = new JMenuItem("Highscore");
spiel.add(highscore);
JMenuItem abbrechen = new JMenuItem("Abbrechen");
spiel.add(abbrechen);
JMenuItem beenden = new JMenuItem("Beenden");
spiel.add(beenden);
beenden.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});
 
Waerst du so freundlich [.CODE] code [./CODE] ohne die punkte zu benutzen?

Dann ist es um einiges lesbarer
Code:
 code
 
Zurück