# Anfangsmenü mit Spiel verknüpfen



## sanika1991 (12. Jan 2013)

Hallo,

Ich habe ein vier gewinnt programmiert und habe dort auch ein Startmenü erstellt, 
jedoch bekomme Ich den Button "Spiel starten" im Anfangsmenü nicht mit der eigentlichen Spielklasse 
verbunden, sodass diese beim Anklicken der Buttons ausgeführt wird.

Könnt ihr mir helfen?

Danke schon mal!!


----------



## Marcinek (12. Jan 2013)

Welcher Fehlermeldung kommt?

Kannst du etwas mehr posten, als "geht nicht"?


----------



## sanika1991 (12. Jan 2013)

Mein Problem ist, dass Ich gar nicht weiss, wie Ich diese Verknüpfung überhaupt erstelle,
also mir fehlen die Operartoren dafür, da Ich noch ein wirklicher Informatikanfänger bin.

Also ich hab ein Startmenü mit dem Button "Spiel starten" und eine Klasse die fürs Spiel an sich 
zuständig ist. Und Ich möchte jetzt gerne dass wenn ich den Button anklicke dass dann das Spiel 
aufgeführt wird.


----------



## Marcinek (12. Jan 2013)

How to Use Buttons, Check Boxes, and Radio Buttons (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)


----------



## sanika1991 (12. Jan 2013)

ich finde da nicht heraus wie man die verknüpfung herstellt.Den Button an sich habe Ich auch schon.
bisher hatte ich die verknüpfung mit einem leeren fenster als platzhalter, und ich habe auch schon versucht in das leere 
fenster die spiel hinzuzufügen mit frame.add aber da akzeptiert er das add nicht.


----------



## Marcinek (12. Jan 2013)

Zeig mal deinen Code.


----------



## sanika1991 (12. Jan 2013)

das ist der Code des Anfangsmenüs


```
import javax.swing.*;
import java.lang.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Container.*;
import java.net.URI;


public class Anfangsmenue extends JFrame implements ActionListener 
{
    //deklarationen = erstellt die einzelnen Buttons namens ...
    private JButton spielStarten;
    private JButton anleitung;
    private JButton ende;
    private JButton options;

    //definieren der Hauptmethode durch festlegen der Funktionen der Variablen
    public static void main(String[] args) throws Exception
    {
        //erzeugen eines neuen Fensters "Menü"
       Anfangsmenue frame = new Anfangsmenue ("Vier gewinnt");
       //erstellen der "Schließen-Funktion"
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       //Größe des erstellten Menüs
       frame.setSize(400,400);
       //öffnet das fensterlayout ohne Vorgaben
       frame.setLayout(null);
       //macht das Fenster erst sichtbar
       frame.setVisible(true);
       
    }
    //erzeugen des Fensters
    public Anfangsmenue(String title)
    {
       //Uberschrift des Fensters erben von frame
       super(title);
       
       //Funktion der Buttons "spielStarten"
       spielStarten = new JButton("Spiel starten");
       //Größe 120x40 und Position 160x40
       spielStarten.setBounds(120,60,160,40);
       //
       spielStarten.addActionListener(this);
       //fügt "schliessen" zum Button hinzu
       add(spielStarten);
       
       //Funktion der Buttons "Anleitung"
       anleitung = new JButton("Spielanleitung");
       //Größe 120x40 und Position 160x40
       anleitung.setBounds(120,170,160,40);
       //
       anleitung.addActionListener(this);
       //fügt "einstellungen" zum Button hinzu
       add(anleitung);
       
       //Funktion der Buttons "Spiel beenden"
       ende = new JButton("Spiel beenden");
       //Größe 120x40 und Position 160x40
       ende.setBounds(120,240,160,40);
       //
       ende.addActionListener(this);
       //fügt "ende" zum Button hinzu
       add(ende);
       
       JLabel label = new JLabel ("Made by C. Tiemann, S. Brunner, M. Wiens, I. Wojcicki, S.Hormes");
       label.setBounds(5,340,370,15);
       add(label);
    }
     //leitet Information an ActionListener weiter, der dann Event auslöst
    public void actionPerformed(ActionEvent e)
    {
        //für spielStarten
        /*if (e.getSource() == spielStarten )
        {
         fenster();
        }*/[/COLOR]
        //für Anleitung
        if (e.getSource() == anleitung)
        {
            spielanleitung();
        }        
        //für Beenden
        if (e.getSource() == ende)
        {
        System.exit(0);
        }
    }
        //öffnen des Spiels bei Auswahl des "Spiel starten"-Buttons
        /*public static void fenster()
    {
        JFrame fenster = new JFrame("Vier gewinnt");
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setSize(400,500);
        fenster.setVisible(true);
        fenster.add (new Spielerstellen());
    }*/[/COLOR]
       public static void spielanleitung() 
	{
 
        //Desktopobjekt holen
        Desktop desktop = Desktop.getDesktop();
 
        //Adresse mit Standardbrowser anzeigen
        URI uri;
        try 
        {
            uri = new URI("http://www.brettspielnetz.de/spielregeln/vier+gewinnt.php");
            desktop.browse(uri);
        } 
        catch (Exception oError) 
        {
        }
        
    }
}
```

und da würde ich gerne bei dem was Ich dort rauskommentiert habe statt des leeren fensters die Klasse mit dem Spiel verknüpfen.


----------



## Marcinek (12. Jan 2013)

setVisible() immer als letztes einfügen.

Wie sieht die KLasse "Spielerstellen§ aus? Theroetisch müsste dies von type JPanel sein.


----------



## sanika1991 (12. Jan 2013)

alles klar..

die klasse spielerstellen sieht wie folgt aus


```
//4gewinnt_v5

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.net.URI;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JTextField;

public  class Spielerstellen  
{
    private static JButton Spielanleitung = new JButton();
	private static JButton NewGame = new JButton();
	private static JButton Close = new JButton();
	private static JTextField Text = new JTextField(); 	
	private static TextField Antwort = new TextField();
	private static TextField Antwort2;
	
	private static Label ausgabe = new Label();
	private static Label ausgabe2 = new Label();
	
	
  public static void create() 
    {
    	
     Spiel spiel = new Spiel();
     SpielFrame frame = new SpielFrame (spiel);
     
     //setzt Groesse, auch Dimension waeren moeglich
     frame.setSize(600,500);
     
     //verhindert GroessenAenderungen von JFrame
     frame.setResizable(false);
     
     //steuert das "x" vom Fenster, Do nothing, wegen WindowsListener
     frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
     
     //ruft Methode auf
     load(spiel, frame);
    	 
     //String Antwort = JOptionPane.showInputDialog(null, "Wie hei�t der erste Spieler?");    
	//String Antwort2 = JOptionPane.showInputDialog(null, "Wie hei�t der zweite Spieler?");

     
     //Fenster sichtbar
     frame.setVisible(true);
    }
    
    

   public static void spielanleitung() 
	{
        // TODO hier Quelltext einfuegen
 
        //Desktopobjekt holen
        Desktop desktop = Desktop.getDesktop();
 
        //Adresse mit Standardbrowser anzeigen
        URI uri;
        try 
        {
            uri = new URI("http://www.brettspielnetz.de/spielregeln/vier+gewinnt.php");
            desktop.browse(uri);
        } 
        catch (Exception oError) 
        {
            //Hier Fehler abfangen -> was hier passiert, versteh ich nicht (iza)
        }
        
    }
    
    public static void NeuStarten(Frame frame)
    {
    	
    	frame.dispose() ;
		create();
		NewGame= new JButton();
		String Antwort = JOptionPane.showInputDialog("Wie hei�t der erste Spieler?");    
		String Antwort2 = JOptionPane.showInputDialog("Wie hei�t der zweite Spieler?");
		ausgabe.setText( "Hallo " + Antwort + " und " + Antwort2);
		ausgabe2.setText( "Viel Spass beim Spielen!");
    	
    }
    
    public static void NeuStarten2(Frame frame)
    {
    	
    	frame.dispose() ;
		create();
		NewGame= new JButton();
		   	
    }
	
    static void load(final Spiel spiel, final SpielFrame frame) 
    {
    	
    	
    	frame.clear();
		spiel.clear();
		
      
       //Form des Spielfeldes
       Box box = Box.createVerticalBox();
       frame.add (box);
       
       frame.setLocationRelativeTo(null);
       
       //Hauptpanel
       JPanel spielPanel = new JPanel (null);
       box.add(spielPanel);
       
       //Hintergrund:
       JPanel backgroundPanel = new JPanel ();
       //kann evtl geloescht werden:
       backgroundPanel.setBounds(0,  0, 366, 314);
       //Hintergrundfarbe:
       backgroundPanel.setBackground (Color.lightGray);
       spielPanel.add(backgroundPanel);
       
       //Panel fuer Steine
       JPanel steinPanel = new JPanel(null);
       steinPanel.setBounds(0, 0, 366, 314);
       //Transparenz:
       steinPanel.setOpaque(false);
       spielPanel.add(steinPanel, 0);
       
       //Spielbrett reinladen:
       JLabel spielbrett = new JLabel (new ImageIcon("bild\\foreground.png"));
       spielbrett.setBounds(0,0,366,314);
       spielPanel.add(spielbrett, 0);
       
       JPanel mousePanel = new Maus(spiel, steinPanel, frame);
	   mousePanel.setBounds(0, 0, 366, 314);
	   mousePanel.setOpaque(false);
	   spielPanel.add(mousePanel, 0);
       
       //
       
       JLabel spielerLabel = new JLabel ();
       box.add (spielerLabel);
       
     //Button "Spiel beenden"
       Close.setBounds(450, 410, 131, 33);
       Close.setVisible(true);
       Close.setText("Spiel Beenden"); 
       spielPanel.add(Close);
       Close.addActionListener(new java.awt.event.ActionListener() 
       {  
          public void actionPerformed(java.awt.event.ActionEvent e) 
          {  
        	   frame.dispose();  
          }  
       });
       
       Label hinweis = new Label( "Bitte Spieler eingebe" );
       ausgabe.setBounds(400, 10, 150, 33);
       ausgabe.setVisible(true);
       spielPanel.add(ausgabe);
       
       ausgabe2.setBounds(400, 60, 150, 33);
        ausgabe2.setVisible(true);
        spielPanel.add(ausgabe2);
      
       
       
       
       initializeNewGameButton(frame);
      
      
     
       spielPanel.add(NewGame); 
       
       
       Spielanleitung.setBounds(20, 410, 131, 33);
       Spielanleitung.setText("Spielanleitung");
       Spielanleitung.addActionListener(new ActionListener() {

               public void actionPerformed(ActionEvent evt) {
                   spielanleitung();
               }
           });
           spielPanel.add(Spielanleitung);
         
           
        }



	private static void initializeNewGameButton(final SpielFrame frame) {
		NewGame.setBounds(200, 410, 131, 33);
		   NewGame.setVisible(true);
		   NewGame.setText("Neu Starten");
		  //.addActionListener(new ButtonLauscher());
		   NewGame.getActionListeners();
		   
		   ActionListener[] actionListeners = NewGame.getActionListeners();
		   if (actionListeners.length == 0)
		   {
	
		   NewGame.addActionListener(new ActionListener() {  
		       public void actionPerformed(ActionEvent e) {  
		    	   //frame.shutdown();
		     	   //Spielerstellen.create();
		    	   NewGame= new JButton();
		     	 Spielerstellen.NeuStarten(frame);
		    	   
		     	  //frame.shutdown();
		    	  // Spielerstellen.load(spiel, frame);
		            }  
		   }
				   );
		   }
	
	}
        
    	
    public static void main (String[] args) {
        create();
    
    }
    
}
```


----------



## Marcinek (12. Jan 2013)

Habe jetzt nicht im detail gelesen:

Es müsste also so gehen: new Spielerstellung().create();

Rest des codes musst du entfernen. Also im ActionListener


----------



## sanika1991 (12. Jan 2013)

Oh super!! Danke!! Saß da jetzt schon seid 3 Nächten und den ganzen heutigen Tag dran..


----------



## sanika1991 (12. Jan 2013)

Noch eine kleine Frage: das gleiche müsste doch auch mit der Klasse Spielanleitung funktionieren oder?


----------



## Marcinek (12. Jan 2013)

Probiere es aus.


----------



## sanika1991 (12. Jan 2013)

hab ich..da akzeptiert er das .create nicht...


----------



## Marcinek (12. Jan 2013)

Sorry,

ich kann dir nicht helfen. Keine Lust jedes Detail einzeln nachzufragen.

Google die Fehlermeldung, oder nimm ein Grundlagenbuch.


----------



## sanika1991 (12. Jan 2013)

Alles klar, danke trotzdem!


----------



## Helgon (12. Jan 2013)

Spielanleitung ist soweit ich das grad gesehen habe nur eine static Methode. also einfach


```
Spielerstellen.spielanleitung();
```

bevor du dir hier irgendwelche sachen zusammen kopierst lern lieber die basics, weil das was du hier fragst ist das grundlegendeste überhaupt..


----------

