2012-04-14 4 views
1

Ich mache ein Spiel, in dem drei Spiele implementiert werden. Ich habe meinen Code in einer einzigen Klasse gestartet, jetzt, da ich ihn in ein MVC-Format umwandeln möchte, habe ich Fehler. Ich habe angefangen, den gesamten Code in der GameView-Klasse zu schreiben. Ich möchte nun einen Teil des Codes aus dieser Klasse in eine SView-Klasse verschieben. Das Problem ist, dass ich den JFrame in der GameView-Klasse initialisiert habe und den variablen Frame nicht finde, wenn ich meinen Code in die SView-Klasse verschiebe. Dann wurde mir gesagt, dass ich es in ein Panel verwandeln und es dann bewegen soll, aber es ist nur ein Fehler in meinem Spiel.Wie implementiere ich meinen Code in MVC Java?

Antwort

1

Sie müssen die Dinge ein wenig anders organisieren. Einige Dinge zu beachten:

  • Ist GameView Ihr Hauptfenster? Mach es so GameView extends JFrame.
  • Ist SView ein Panel? Mach es so SView extends Panel.

Eine andere Sache zu denken: SView ist einige Panel, dass Sie Ihre GameView hinzufügen möchten, aber es ist nicht die Aufgabe von SViewselbst hinzuzufügen. Stattdessen einfach instanziiert und diese Komponenten irgendwo außerhalb dieser beiden Klassen zusammenstellen, f.e .:

GameView gameView = new GameView(); 
gameView.add(new SView()); 

Sie auch GameView stattdessen ein new SView() in seinem Konstruktor Code hinzufügen haben könnten.

Wie auch immer, der Hauptpunkt hier ist, dass eine Komponente sich nicht damit beschäftigen sollte, sich selbst zu ihrem Elternteil hinzuzufügen, nur um ihren eigenen Inhalt/Kinder zu erstellen.

Viel Glück.

+0

Ich sehe keinen guten Grund in irgendeinem der ursprünglichen Poster-Code oben für eine Klasse, um JFrame oder JPanel zu erweitern. –

+0

Was soll ich mit der letzten Zeile machen? Es hat einen Rahmen im Parameter. panel.setLocation ((rahmen.getWidth() - panel.getWidth())/2, 80); –

1

Einige Vorschläge:

  • Der Haupt GUI einen Cardlayout verwenden würde, so dass Sie JPanels leicht austauschen können.
  • Die Hauptfunktion des ausgewählten Spielmenüs besteht darin, JPanels zu vertauschen, so dass das ausgewählte Spiel visualisiert wird und das ausgewählte Spiel dann initialisiert wird.
  • Arbeite an jedem Spiel einzeln. Richten Sie jede einzelne Spielklasse auf die Erstellung eines JPanels aus, um das Spiel zu halten. Geben Sie jeder Spielklasse eine Hauptmethode zum Testen, die einen JFrame erstellt, eine Spielklasseninstanz erstellt, den JPanel der Instanz in den JFrame legt, das Spiel initialisiert und es anzeigt.
  • Sobald das Spiel eigenständig funktioniert, kannst du es zu deiner größeren GUI hinzufügen, die mehrere Spiele anzeigen kann.
  • Überlegen Sie, ob jede Spielklasse eine gemeinsame Schnittstelle für allgemeine Funktionen implementiert. Zum Beispiel könntest du der Schnittstelle eine initialize() -Methode geben, die jede Spielklasse überschreiben würde.
  • Jede Spielklasse müsste MVC-basiert sein, so dass sie ein Modell, eine Steuerklasse (n) zum Interagieren mit dem Modell und eine Ansichtsklasse, die den Zustand des Modells auf dem JPanel anzeigt, wie oben erwähnt, aufweist.
+1

+1 Ausgezeichneter Design-Rat; ['MainPanel'] (http://Stackoverflow.com/a/3072979/230513) ist ein Beispiel für Punkt drei. Sie können eine beliebige Anzahl von Instanzen zum Prototypen Ihrer größeren GUI verwenden. – trashgod

+0

@trashgod: danke. Hier ist mein Link für ein Beispiel von MVC: [MVC_ProgressBarThread] (http://stackoverflow.com/questions/5533497/mvc-progress-bar-threading/5533581#5533581) –

+0

Gut [Beispiel] (http://stackoverflow.com/questions/5533497/mvc-progress-bar-threading/5533581 # 5533581); Ich habe es [hier] (http://stackoverflow.com/a/3072979/230513) zitiert, um das Beobachtermuster zu implementieren. Zögere nicht, etwas von mir zu bearbeiten, wenn es nötig ist. – trashgod