# startbildschirm spiel



## pHL (6. Nov 2009)

hallo,

Ich programmiere gerade ein kleines Hubschrauber Spiel, begonnen habe ich mit dem Tutorial von Quaxli, ty, habe auch schon einige Dinge hinzugefügt bzw. verändert, jetzt steh ich aber vor folgendem Problem. Ich möchte einen Startbildschirm erstellen. Das sollte also so aussehen: Bevor sich das Spiel starte sollte ein Menü zu sehen sein, indem es z.B eine Möglichkeit gibt die Steuerung zu ändern oder die Highscore Liste anzuschauen oder eben das Spiel zu starten.

Wäre sehr dankbar für einige Ideen. Hab bisher leider nichts gefunden.


----------



## @x.l (6. Nov 2009)

#edit sorry, hab mich vertan


----------



## pHL (6. Nov 2009)

ty, werd mir das mal anschauen


----------



## icarus2 (6. Nov 2009)

Einfach einen zweiten JFrame instanzieren. Dieser beinhalted das ganze Menu und auch entsprechende Listener sind dran gehängt. Anschliessend aus der Ereignisbehandlung heraus die neuen Fenster öffnen, verändern oder was auch immer.


----------



## pHL (6. Nov 2009)

ok ty, aber wie mach ich dass die paintComponent Methode erst aufgerufen wird nachdem das Spiel gestartet ist.


----------



## hdi (6. Nov 2009)

Das mit dem zweiten JFrame ist keine gute Idee. Nimm lieber nen (modalen) JDialog.
Zum paintComponent(): Du kannst ein panel.setIgnoreRepaint(true) versuchen, und es wieder auf false stellen, wenn das Spiel startet. Oder du prüfst innerhalb der paintComponent, ob das Spiel gestartet ist. Falls nein, einfach gleich ein return. (nach dem super-Aufruf)


----------



## pHL (6. Nov 2009)

danke, dass mit der abfrage ob das spiel gestartet ist habe ich schon versucht, hat bis jz noch nicht geklappt, aber ich probier das mal mit setIgnore


----------



## icarus2 (6. Nov 2009)

hdi hat gesagt.:


> Das mit dem zweiten JFrame ist keine gute Idee.



Kannst du mir sagen warum das keine gute Idee ist? Funktioniert hat es nämlich bei mir immer. Wiso würdest du das nicht machen?


----------



## KrokoDiehl (6. Nov 2009)

Kann man nicht einen _JFrame _mit dem Menü machen, dort alles schön einstellen lassen und auf einen Button á la "Spiel starten" hin, öffnet man einen _JFrame _mit dem Spiel (welches dann erst startet) und schließt den Menü-Frame?


----------



## pHL (10. Nov 2009)

also ich hab jetzt schon viel probiert, ich komm aber einfach nicht auf die gewünschte lösung, zu dem JDialog, das möchte ich nicht, da ich kein 2tes Fenster haben will. Hier mal ein Beispiel Code von mir.


```
public class Panel extends JPanel{

	public Panel(int w, int h){      	
		this.setPreferredSize(new Dimension(800,600));
		JFrame frame = new JFrame("hallo");
		frame.setLocation(100,100);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(this);
		frame.pack();
		frame.setVisible(true);
        }

       	public static void main(String[] args) {
		new Panel(800,600);

		
	}
}
```

kann mir vlt mal jemand einen beispiel code zeigen, mit nem 2ten frame?
wäre sehr dankbar


----------



## Michael... (10. Nov 2009)

pHL hat gesagt.:


> das möchte ich nicht, da ich kein 2tes Fenster haben will.
> ...
> kann mir vlt mal jemand einen beispiel code zeigen, mit nem 2ten frame?


?????

Übrigens ist es nicht gerade objektorientiert in einem Panel ein JFrame zu erzeugen, damit sich das Panel selbst darstellen kann! Du willst ja sicherlich noch mehr darstellen als das Panel - eventuell ein Menü...


----------



## pHL (10. Nov 2009)

hmm, ja gut, wie schon oben gepostet, ich möchte ein Menü, in dem man einige dinge auswählen kann, 
unter anderem eben auch "spiel starten", und dann sollte dieser frame geladen werden


----------



## KrokoDiehl (10. Nov 2009)

Vielleicht verstehe ich das generelle Problem nicht ganz, aber wie wäre folgende Lösung?

```
public class StartBildschirm extends JFrame implements ActionListener
{
    protected JButton btnStarteSpiel = null;

    public StartBildschirm()
    {
        //...
        btnStarteSpiel.addActionListener(this);
    }
    
    //...

    @Override
    public void actionPerformed(ActionEvent event)
    {
        // hier das eigentliche Spiel erstellen, initialisieren und wasWeißIch
        final Spiel spiel = new Spiel();
        SwingUtilites.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                // ...und hier das Spiel anzeigen
                spiel.setVisible(true);
            }
        });
        // ...und den Startbildschirm verbergen
        this.setVisible(false);
    }

    public static void main(String[] args)
    {
        final StartBildschirm menu = new StartBildschirm();
        SwingUtilites.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                menu.setVisible(true);
            }
        });
    }        
}
```
Das ist dein Startbildschirm, der zu Programmstart angezeigt wird. Dort gibts dann alles was du magst, u.A. einen "Start"-Button, der dann einen neuen Frame (s.u.) öffnet und den Startbildschirm verbirgt. Musst halt nur auf die 
	
	
	
	





```
System.exit()
```
 aufpassen und sowas.

```
public class Spiel extends JFrame
{
    public Spiel()
    {
        //...
    }
}
```

Das ist nur ein Beispiel was den Ablauf angeht und soll nicht Vorlage für Anwendungsgestaltung bieten


----------



## pHL (10. Nov 2009)

ja danke, ich probier dass später mal


----------

