Durch klicken von Button neues Fenster oeffnen

coci111

Mitglied
Java:
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
 
Hallo coci111,

meinst du so:

Java:
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
 
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
 
Java:
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
 
Hallo coci111,

meinst du so:

Java:
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


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
 
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:

Java:
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
 

Zurück
Oben