# Durch klicken von Button neues Fenster oeffnen



## coci111 (25. Apr 2016)

```
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import java.awt.SystemColor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;


public class Fenster_GUI extends JFrame{

   private JPanel contentPane;

  

   /**
    * Launch the application.
    */
   public static void main(String[] args) {
       EventQueue.invokeLater(new Runnable() {
       public void run() {
         try {
           Fenster_GUI frame = new Fenster_GUI();
          
      
           frame.setVisible(true);
         } catch (Exception e) {
           e.printStackTrace();


         }
       }
     });
   }
  

    
   /**
    * Create the frame.
    */
   public Fenster_GUI() {
     setTitle("Class1");
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     setBounds(100, 100, 413, 352);
     contentPane = new JPanel();
     contentPane.setBackground(Color.WHITE);
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
     setContentPane(contentPane);
     contentPane.setLayout(null);
    
     JButton btnBeenden = new JButton("Beenden");
     btnBeenden.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent arg0) {
         System.exit(0);
       }
     });
     btnBeenden.setBounds(256, 266, 119, 23);
     contentPane.add(btnBeenden);
  
  
     JButton btnSpielstarten = new JButton("Spiel starten");
     btnSpielstarten.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent arg0) {
      
       }
     });
     btnSpielstarten.setBounds(24, 266, 152, 23);
     contentPane.add(btnSpielstarten);

    
     JLabel label = new JLabel("");
     label.setEnabled(false);
     Image img = new ImageIcon(this.getClass().getResource("/memory.png.")) .getImage();
     label.setIcon(new ImageIcon(img));
     label.setBounds(-111, 0, 529, 317);
     contentPane.add(label);
   }
}
```


Ich möchte durch das klicken des Knopfs btnSpielstarten, dass sich das andere Fenster öffnet names Memory. Kann mir irgendjemand damit helfen ?
LG
und danke schon mal im Vorraus


----------



## Flown (25. Apr 2016)

So jetzt allgemein: Ein Thema pro Problem und Javacode in Tags: [code=java] //JAVA CODE HERE [/code]


----------



## Sugan (25. Apr 2016)

Hallo coci111,

meinst du so:


```
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import java.awt.SystemColor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;


public class Fenster_GUI extends JFrame{

   private JPanel contentPane;


   /**
    * Launch the application.
    */
   public static void main(String[] args) {
       EventQueue.invokeLater(new Runnable() {
       public void run() {
         try {
           Fenster_GUI frame = new Fenster_GUI();
        
    
           frame.setVisible(true);
         } catch (Exception e) {
           e.printStackTrace();


         }
       }
     });
    
   }

  
   /**
    * Create the frame.
    */
   public Fenster_GUI() {
     setTitle("Class1");
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     setBounds(100, 100, 413, 352);
     contentPane = new JPanel();
     contentPane.setBackground(Color.WHITE);
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
     setContentPane(contentPane);
     contentPane.setLayout(null);
  
     JButton btnBeenden = new JButton("Beenden");
     btnBeenden.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent arg0) {
         System.exit(0);
       }
     });
     btnBeenden.setBounds(256, 266, 119, 23);
     contentPane.add(btnBeenden);
     JButton btnSpielstarten = new JButton("Spiel starten");
     btnSpielstarten.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent arg0) {
          NeuesFenster memory = new NeuesFenster();        //<----------------- neu
       }
     });
     btnSpielstarten.setBounds(24, 266, 152, 23);
     contentPane.add(btnSpielstarten);

  
    
     JLabel label = new JLabel("");
     label.setEnabled(false);
     Image img = new ImageIcon(this.getClass().getResource("/memory.png.")) .getImage();
     label.setIcon(new ImageIcon(img));
     label.setBounds(-111, 0, 529, 317);
     contentPane.add(label);
   }
  
   private class NeuesFenster extends JFrame{          //<-------------------neu
      public NeuesFenster(){
          super("Memory");
          setSize(200,100);
          setVisible(true);
      }
   }
}
```


Ich hab deinen Code einfach nur ergänzt. Hoffe das Hilft!

LG

Sugan


----------



## coci111 (27. Apr 2016)

Vielen dank Sugan, jetzt öffnet sich schon das neue Fenster das nächste Problem auf das ich jetzt alerdings gestoßen bin ist, dass in dem neuen Fenster mein Spiel "Memory" nicht angezeigt wird sondern nur ein leeres Fenster.
Und vielen dank schon einmal im Voraus
LG Coci111


----------



## Jardcore (27. Apr 2016)

Dann musst du wohl dafür sorgen das der Inhalt des neuen Fensters mit deinem Spiel gefüllt wird. oO


----------



## coci111 (27. Apr 2016)

ja soweit bin ich auch schon aber wie geht das


----------



## KaffeeFan (27. Apr 2016)

Du hast dein JPanel "contentpane" doch auch mit Inhalt füllen können, das ist bei deinem neuen fenster doch nicht anderes.


----------



## coci111 (27. Apr 2016)

Meinen sie mein StartFenster ?


----------



## KaffeeFan (27. Apr 2016)

Richtig. 
In welcher Form existiert denn dein Spiel?


----------



## coci111 (27. Apr 2016)

```
import ch.aplu.jgamegrid.*;
import java.awt.Color;
import ch.aplu.util.*;

public class Memory extends GameGrid implements GGMouseListener
{
   private boolean isReady = true;
   private MemoryCard card1;
   private MemoryCard card2;
  
  
   public Memory()
  {
  super(4, 4, 115, null, null, false);
  MemoryCard[] cards = new MemoryCard[16];
  
  for (int i = 0; i < 16; i++)
  {
     if (i < 8)
       cards[i] = new MemoryCard(i);
     else
       cards[i] = new MemoryCard(i-8);
     addActor(cards[i], getRandomEmptyLocation());
     cards[i].show(1);
  }
  addMouseListener(this, GGMouse.lPress);
  doRun();
  show();
   
  while (true) {
     Monitor.putSleep();
     delay(1000);
     card1.show(1);
     card2.show(1);
     isReady = true;
     setMouseEnabled(true);
  }
   
  }

public boolean mouseEvent(GGMouse mouse) {
    Location location = toLocation(mouse.getX(), mouse.getY());
        MemoryCard card = (MemoryCard) getOneActorAt(location);
        if (card.getIdVisible() == 0)
          return true;
         
        card.show(0);
        if (isReady)
        {
          isReady = false;
          card1 = card;
           
        }
        else
        {
          card2 = card;
          if (card1.getId() == card2.getId())
            isReady = true;
          else
          {
            setMouseEnabled(false);
            Monitor.wakeUp();
          }
           
        }
        return true;
}

  public static void main(String[] args)
  {

  new Memory();
  }




}
```
Das ist mein spiel


----------



## Flown (27. Apr 2016)

SCHREIB DEINEN CODE IN CODE-TAGS!!!!!!!!

Nochmal: [code=java]//Java-Code HERE[/code]


----------



## KaffeeFan (27. Apr 2016)

Flown hat gesagt.:


> ...Javacode in *Tags*: [code=java] //JAVA CODE HERE [/code]



...!


----------



## coci111 (27. Apr 2016)

was ist das können sie meinen Code nicht lesen so wie ich ihn reinkopiert habe?


----------



## coci111 (27. Apr 2016)

In Form von GameGrid


----------



## KaffeeFan (27. Apr 2016)

coci111 hat gesagt.:


> was ist das können sie meinen Code nicht lesen so wie ich ihn reinkopiert habe?



Lesen schon, aber die Formatierung ist für'n verlängerten Rücken...



coci111 hat gesagt.:


> In Form von GameGrid



Habe keine Ahnung von JGameGrid, aber vielleicht hilft dir das: 
http://www.aplu.ch/home/viewthread.jsp?mid=1677&


----------



## coci111 (27. Apr 2016)

Sugan hat gesagt.:


> Hallo coci111,
> 
> meinst du so:
> 
> ...




und zwar geht es um das schließen des Fensters. Es funktioniert soweit das zwar nun ein neues leeres Fenster erscheint allerdings bleib die GUI (Fenster_GUI) weiterhinm geöffnet wie kann man diese schließen wenn ich auf den Button Spiel starten klicke? also es soll zwei funktionen gleichzeitig ausführen


LG Coci111


----------



## KaffeeFan (27. Apr 2016)

Dann setze im entsprechenden ActionListener das entsprechende Fenster auf setVisible(false)


----------



## Sugan (28. Apr 2016)

KaffeeFan hat gesagt.:


> Dann setze im entsprechenden ActionListener das entsprechende Fenster auf setVisible(false)



Ja entweder das, oder du fügst in dem ActionListener die dispose Methode ein:


```
btnSpielstarten.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent arg0) {
          dispose();
          NeuesFenster spiel = new NeuesFenster();      
       }
     });
HERE
```

Wo wir grade dabei sind, dispose() und damit auch "DISPOSE_ON_CLOSE" (bei der setDefaultCloseOperation) schließt nur das Fenster, exit() und "EXIT_ON_CLOSE" beendet das Programm. Du solltest dir überlegen, ob es also ggf. sinnvoller wäre, wenn man beim weg-x-en des Hauptfensters das ganze Programm beendet.

mehr dazu hier: http://www.java-forum.org/thema/per-button-frame-schliessen.82045/

LG

Sugan


----------



## coci111 (4. Mai 2016)

Vielen dank für die Hilfe


----------

