StartMenu Klasse verbessert

currentStatus
Vickvick2002 2025-01-03 13:39:40 +01:00
parent 9c3fdf9406
commit 936967e809
1 changed files with 115 additions and 28 deletions

View File

@ -1,52 +1,139 @@
package PR2.HitoriSpiel.GUI;
package GUI;
import domain.HitoriBoard;
import persistent.BoardLoader;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.InputStream;
import java.util.List;
public class StartMenu extends JPanel {
public class StartMenu extends JFrame {
private JPanel mainPanel;
public StartMenu() {
setTitle("Hitori - Hauptmenü");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600, 400);
mainPanel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = GridBagConstraints.RELATIVE;
gbc.insets = new Insets(10, 10, 10, 10);
gbc.anchor = GridBagConstraints.CENTER; // Buttons zentrieren
JLabel titleLabel = new JLabel("Willkommen im Hitori-Spiel!");
titleLabel.setFont(new Font("Arial", Font.BOLD, 16));
titleLabel.setHorizontalAlignment(SwingConstants.CENTER);
mainPanel.add(titleLabel, gbc);
public StartMenu(JFrame parentFrame) {
// Layout auf FlowLayout setzen
this.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10)); // Zentriert mit Abständen
// Buttons erstellen
JButton continueButton = createButton("Spiel fortsetzen", 200, 30);
JButton selectBoardButton = createButton("Spielfeld aussuchen", 200, 30);
JButton randomBoardButton = createButton("Zufälliges Spielfeld", 200, 30);
JButton highscorelistButton = createButton("Highscoreliste anzeigen", 200, 30);
JButton highscorelistButton = createButton("Highscoreliste anschauen", 200, 30);
JButton exitButton = createButton("Spiel beenden", 200, 30);
// Namen für AssertJ-Swing setzen
continueButton.setName("continueButton");
selectBoardButton.setName("selectBoardButton");
randomBoardButton.setName("randomBoardButton");
highscorelistButton.setName("highscorelistButton");
exitButton.setName("exitButton");
// ActionListener hinzufügen
continueButton.addActionListener(e -> showMessage("Spiel fortsetzen wird implementiert."));
selectBoardButton.addActionListener(e -> showMessage("Spielfeld auswählen wird implementiert."));
randomBoardButton.addActionListener(e -> showMessage("Zufälliges Spielfeld wird gestartet."));
highscorelistButton.addActionListener(e -> showMessage("Highscore-Liste wird angezeigt."));
mainPanel.add(continueButton, gbc);
mainPanel.add(selectBoardButton, gbc);
mainPanel.add(randomBoardButton, gbc);
mainPanel.add(highscorelistButton, gbc);
mainPanel.add(exitButton, gbc);
continueButton.addActionListener(e -> continueGame());
selectBoardButton.addActionListener(e -> selectBoard());
randomBoardButton.addActionListener(e -> randomBoard());
highscorelistButton.addActionListener(e -> highscorelist());
exitButton.addActionListener(e -> System.exit(0));
// Buttons zum Panel hinzufügen
this.add(continueButton);
this.add(selectBoardButton);
this.add(randomBoardButton);
this.add(highscorelistButton);
this.add(exitButton);
add(mainPanel);
setVisible(true);
setLocationRelativeTo(null);
}
// Methode zum Anzeigen von Nachrichten
private void showMessage(String message) {
JOptionPane.showMessageDialog(this, message, "Info", JOptionPane.INFORMATION_MESSAGE);
private void continueGame() {
// TODO: Logik zum Fortsetzen des Spiels implementieren
JOptionPane.showMessageDialog(this, "Spiel fortsetzen wurde angeklickt");
}
// Methode zum Erstellen von Buttons mit fester Größe
private void selectBoard() {
// Lade die Liste der Spielfeld-Dateien
List<String> boardFileNames = BoardLoader.loadBoardsAsList();
if (boardFileNames.isEmpty()) {
JOptionPane.showMessageDialog(this, "Keine Spielfelder gefunden.", "Information", JOptionPane.INFORMATION_MESSAGE);
return;
}
// Erstelle die JComboBox
JComboBox<String> boardSelector = new JComboBox<>(boardFileNames.toArray(new String[0]));
boardSelector.setPreferredSize(new Dimension(250, 30)); // Größe der ComboBox anpassen
JPanel selectionPanel = new JPanel(new BorderLayout());
selectionPanel.add(new JLabel("Wähle ein Spielfeld:"), BorderLayout.NORTH);
selectionPanel.add(boardSelector, BorderLayout.CENTER);
// Zeige das Auswahlfenster
int option = JOptionPane.showConfirmDialog(
this,
selectionPanel,
"Spielfeld auswählen",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.PLAIN_MESSAGE
);
// Aktion, wenn der Benutzer auf OK klickt
if (option == JOptionPane.OK_OPTION) {
String selectedFile = (String) boardSelector.getSelectedItem();
if (selectedFile != null) {
try {
InputStream inputStream = BoardLoader.class.getResourceAsStream("/persistent/Hitori_Spielfelder/" + selectedFile);
if (inputStream == null) {
throw new Exception("Ressourcendatei nicht gefunden: /persistent/Hitori_Spielfelder/" + selectedFile);
}
// Lade das ausgewählte Spielfeld
int[][] boardData = BoardLoader.loadBoard("/persistent/Hitori_Spielfelder/" + selectedFile);
loadGameBoard(boardData); // Zeige das Spielfeld an
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, "Fehler beim Laden des Spielfelds: " + ex.getMessage(), "Fehler", JOptionPane.ERROR_MESSAGE);
}
}
}
}
private void randomBoard() {
// TODO: Logik zum Auswählen eines zufälligen Spielfeldes implementieren
JOptionPane.showMessageDialog(this, "Zufälliges Spielfeld wurde angeklickt");
}
private void highscorelist() {
// TODO: Logik zur Anzeige der Highscoreliste implementieren
JOptionPane.showMessageDialog(this, "Highscoreliste wurde angeklickt");
}
// Hilfsmethoden
private JButton createButton(String text, int width, int height) {
JButton button = new JButton(text);
button.setPreferredSize(new Dimension(width, height)); // Feste Größe setzen
button.setPreferredSize(new Dimension(width, height));
return button;
}
private void loadGameBoard(int[][] boardData) {
// Neues Panel für das Spielfeld
mainPanel.removeAll();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(new GameBoard(new HitoriBoard(boardData, List.of())), BorderLayout.CENTER);
mainPanel.revalidate();
mainPanel.repaint();
}
}