# Menü erstellen



## Marco Hoheneder (9. Mai 2012)

Hallo. Ich habe ein Problem. Ich will bei meinem Programm ein Menü erstellen weiß aber nicht wie das funktioniert.


```
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;


public class ColorGameGUI {



private JFrame frame;
private JButton button;
private JLabel hitsLabel;
private JPanel colorPanel, arrPanel;
private int hits, clicks;
private int searchX, searchY;
private double percent;
private Color randomColor;
JMenuBar menuBar;
JMenu menu, submenu;
JMenuItem menuItem;
JRadioButtonMenuItem rbMenuItem;
JCheckBoxMenuItem cbMenuItem;


public static void main(String[] args){
	ColorGameGUI colorgamegui=new ColorGameGUI();
	colorgamegui.go();
}





public void go(){
	frame=new JFrame("ClickTheRightColor");
	arrPanel=new JPanel();
	hitsLabel=new JLabel("Clicks: "+clicks+" Hits: "+hits+" Percent: "+percent);
	colorPanel=new JPanel();
	
	arrPanel.setLayout(new GridLayout(4, 4));
	
	searchX=(int)(Math.random()*4);
	searchY=(int)(Math.random()*4);
	
	for(int a=0; a<4; a++){
		
		for(int b=0; b<4; b++){
			
			randomColor=createColor();
			
			button=new JButton();
			button.setBackground(randomColor);
			button.addActionListener(new MyListener(a, b, button));
		
			arrPanel.add(button);
			
			if((a==searchX)&&(b==searchY)){
				colorPanel.setBackground(randomColor);
			}
		}
	}
	
	
	colorPanel.setBounds(260, 25, 280, 40);
	arrPanel.setBounds(260, 100, 280, 300);
	hitsLabel.setBounds(260, 425, 280, 40);
	
	frame.add(colorPanel);
	frame.add(hitsLabel);
	frame.add(arrPanel);
	frame.setLayout(null);

	frame.setBounds(100, 100, 800, 600);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setVisible(true);
	frame.setResizable(false);
}



public Color createColor(){
	int red=(int) (Math.random()*255);
	int blue=(int) (Math.random()*255);
	int green=(int) (Math.random()*255);
	
	Color randomColor=new Color(green, blue, red);
	
	return randomColor;
}
	
class MyListener implements ActionListener{
	
	private int x, y;
	JButton button;
	
	/**
	 * This method is the constructor of the MyListener class.
	 * @param x
	 * @param y
	 * @param button
	 */
	public MyListener(int x, int y, JButton button){
		this.x=x;
		this.y=y;
		this.button=button;
	}				
	
	@Override
	public void actionPerformed(ActionEvent ae){
		
		clicks++;
		
		if((x==searchX)&&(y==searchY)){
			hits++;
			frame.setVisible(false);
			go();
		}
		
		percent=Math.round((((double)hits)/((double)clicks))*100);
		
		hitsLabel.setText("Clicks: "+clicks+" Hits: "+hits+" Percent: "+percent);
	}
}
}
```

http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html

Auf dieser Seite findet man ein Tutorial was mir aber leider nicht weiter hilft.


----------



## Marco Hoheneder (9. Mai 2012)

So dass oben links zwei Buttons sind mit Datei und Einstellungen sind. Wo ich dann ein Savegame einbauen kann.


----------



## Maddin (9. Mai 2012)

Hi,

du kannst in Swing einem JFrame eine JMenuBar zuweisen.
Das von dir angegebene Tutorial fand ich dafür eigentlich recht hilfreich.

Grundsätzliche Vorgehensweise:

 JMenuBar erstellen
 der JMenuBar JMenus (in deinem Beispiel Datei und Einstellungen) hinzufügen
 den JMenus JMenuItems (zb Speichern) hinzufügen
 die JMenuBar für den JFrame setzen


Wo genau liegt dein Problem?


Gruß

Martin


----------



## Marco Hoheneder (10. Mai 2012)

Hallo Martin, ja ich hab jetzt das Menü geschrieben aber in einer eigenen Klasse. Ich weiß nicht wie ich das Spiel in das Menü einbauen kann oder umgekehrt   Ich hoffe du verstehst was ich meine. dass bei der Ausgabe das Menü und das Spiel gleichzeitig da ist. 



```
import javax.swing.*;

public class Menu{
	public static void main(String[] args) {
		Menu s = new Menu();
	}

	public Menu(){
		JFrame frame = new JFrame("ClickTheRightColorGame");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JMenuBar menubar = new JMenuBar();
		JMenu filemenu = new JMenu("Datei");
	
		JMenu editmenu = new JMenu("Einstellungen");
		editmenu.add(new JSeparator());
		JMenuItem fileItem1 = new JMenuItem("New");
		JMenuItem fileItem2 = new JMenuItem("Load");
		JMenuItem fileItem3 = new JMenuItem("Save");		
		
		JMenuItem editItem1 = new JMenuItem("?");
		JMenuItem editItem2 = new JMenuItem("?");
		JMenuItem editItem3 = new JMenuItem("Difficult");
		//editItem2.add(new JSeparator());   for a line over menuItem
		
		filemenu.add(fileItem1);
		filemenu.add(fileItem2);
		filemenu.add(fileItem3);
		
		editmenu.add(editItem1);
		editmenu.add(editItem2);
		editmenu.add(editItem3);
		
		menubar.add(filemenu);
		menubar.add(editmenu);
		frame.setJMenuBar(menubar);
		frame.setSize(400,400);
		frame.setVisible(true);
	}
}
```


Freundliche Grüße
Marco


----------



## Funresort (11. Mai 2012)

Hallo Marco,
Bin zwar nicht Martin  aber ich dachte ich helf mal 
Wieso schreibst du das Menu in eine eigene Klasse? Schreibs doch in der selben und frag alles mit Listener ab, um des dann auszuführen öffnest du nen neuen Thread.  
oder wenn du es umbeding in einer anderen Klasse machen willst, dann deklariere(ein schönes Wort^^) deine Variablen global und mach se public, dann kannste se über dein Objekt aufrufen, Listener hinzufügen und und und^^ is zwar nich schön würde aber auch gehen 
Gruß Chris


----------



## Maddin (19. Mai 2012)

Hi,

sorry für meine späte Antwort.

Wenn ich dich richtig verstanden hab, willst du einfach in dein vorhandenes ColorGameUI die MenuBar einbauen.
Dazu musst du nur die beiden Codeschnipsel, die du gepostet hast, kombinieren.
Also: dem Frame die Panel und Label hinzufügen sowie via setJMenuBar die Menubar zuweisen.

Wenn du dann noch auf die verschiedenen Objekte zugreifen willst, musst du sie wie Funresort schon gesagt hat, in der Klasse als Attribut deklarieren. Bei mehreren Klassen würde ich dir dann zu Gettern und Settern raten.


Gruß

Martin


----------

