Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory"

coci111

Mitglied
Hallöchen zusammen,
ich habe ein Problem und zwar habe ich eine GUI programmiert in der durch das klicken des Buttons "Spiel starten" mein anderes programmiertes Spiel "Memory" geöffnet werden soll.
Mein Problem das ich habe ist, dass zwar ein neues fenster geöffnet wird allerdings dieses leer ist und die Verbindung zu der Klasse also zu meinem Spiel "Memory" fehlt. ES wäre nett wenn mir in dieser Situation jemand helfen kann ich bedanke mich schon im Vorraus für eure Hilfe.

Grüße Coci111

Programmcode GUI:
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;
import javax.swing.JTextField;
import ch.aplu.jgamegrid.GGMouseListener;
import ch.aplu.jgamegrid.GameGrid;

public class Fenster_GUI extends JFrame {
    
 private JPanel contentPane;
 private JTextField txtname;
 
 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();
    }
   }
  });
 }
 
 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, 241, 119, 23);
  contentPane.add(btnBeenden);
  JButton btnSpielstarten = new JButton("Spiel starten");
  btnSpielstarten.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent arg0) {
    Memory m1 = new Memory();
    m1.setVisible(true);
   }
  });
  btnSpielstarten.setBounds(10, 241, 119, 23);
  contentPane.add(btnSpielstarten);
  txtname = new JTextField();
  txtname.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    txtname.getText();
   }
  });
  txtname.setBounds(188, 286, 187, 20);
  contentPane.add(txtname);
  txtname.setColumns(10);
  JLabel lblname = new JLabel("Benutzername eingeben:");
  lblname.setBounds(10, 289, 168, 14);
  contentPane.add(lblname);
  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);
 }
}

und mein Code zum programmierten Spiel Memory:

Code Memory:
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();
 }
}
 
Zuletzt bearbeitet von einem Moderator:
Das nächste mal bitte deinen Text in einem Beitrag zusammenfassen und IMMER!! (Java-)Code in Code-Tags setzen: [code=java]//JAVA CODE HERE[/code]
 
Meinen sie das ich in der Klasse Memory auch das Fenster GUI aufrufen muss ?
Moin,
Natürlich, Du willst sie ja verwenden!!
@VfL_Freak: Nein, will coci nicht, sondern das umgekehrte. Sie will aus Fenster_GUI eine neue Instanz von Memory erstellen.
Die Basisklasse von Memory erweitert Gamegrid die wiederum java.awt.Canvas erweitert. GameGrid kann Animationen in einer Endlosschleife anzeigen.
Auf Anhieb kann ich keine Fehler entdecken. Man sollte zwar nicht Swing und AWT mischen, aber es müsste trotzdem was auf dem Bildschirm zu sehen sein.
 
das Problem liegt bei unserem Spiel Memory:
while (true) {
Monitor.putSleep();
delay(1000);
card1.show(1);
card2.show(1);
isReady = true;
setMouseEnabled(true);

denn wenn wir diesen Teil nicht sichtbar machen funktioniert das Öffnen des Fensters durch das klicken auf den Button Spiel starten. Kann mir da jemand helfen ? Ich glaube nämlich das ich diesen Teilcode meines Spiels umändern muss und nicht das Fenster GUI
 
ich hab ewig gesucht und dann diesen code gefunden und er funktioniert auch so super gut ohne probleme nur wenn ich dann das spiel memory mit meinem startfenster verbinden will funktioniert es nicht mehr außer ich mache diesen teil des codes den ich gerade oben reingeschrieben habe nicht sichtbar mache dann geht es außßer das sich die karten die ich aufgedeckt habe sich nicht wieder zurück umdrehen lassen. Grüße Coci111
 
und das problem liegt tatsächlich monitor.putSleep(); aber es ist dafür da, dass das Spiel reagiert wenn man klickt das dann die bilder sich dann umdrehen also reagieren sozusagen
 
(a) was für eine Klasse ist Monitor?? Selbstgeschrieben?? 🙄
(b) was genau macht die Methode putSleep??
Klingt IMHO nicht sonderlich nach "ist dafür da, dass das Spiel reagiert" - eher nach "Spiel: leg dich schlafen" 😉
Poste ggf. mal den Code dieser Klasse ...

Gruß Klaus
 

Zurück
Oben