Änderung an Hintergund und Buttonfarbe

currentStatus
Vickvick2002 2025-01-04 16:07:21 +01:00
parent 7139741018
commit f440ecb839
5 changed files with 166 additions and 41 deletions

View File

@ -6,23 +6,6 @@ import java.util.List;
public class BoardLoader {
/*
* Gibt eine Liste aller verfügbaren Spielfeld-Dateien im Package zurück.
* @return Eine Liste von relativen Pfaden zu CSV-Dateien.
*/
/*public static List<String> loadBoardsAsList() {
// Harte Kodierung der bekannten Dateien
return List.of(
"Hitori4x4_leicht.csv",
"Hitori5x5leicht.csv",
"Hitori8x8leicht.csv",
"Hitori8x8medium.csv",
"Hitori10x10medium.csv",
"Hitori15x15_medium.csv"
);
}*/
public static List<String> loadBoardsAsList() {
List<String> boardFiles = new ArrayList<>();
try {

View File

@ -3,7 +3,8 @@ package PR2.HitoriSpiel.GUI;
import PR2.HitoriSpiel.Domain.StateManager;
import PR2.HitoriSpiel.Domain.HitoriBoard;
import PR2.HitoriSpiel.Domain.HitoriCell;
import PR2.HitoriSpiel.Domain.HitoriValidator;
import PR2.HitoriSpiel.Utils.HighscoreManager;
import PR2.HitoriSpiel.Utils.Setup;
import javax.swing.*;
import java.awt.*;
@ -64,14 +65,14 @@ public class GameBoard extends JPanel {
private JPanel createControlPanel() {
JPanel controlPanel = new JPanel();
JButton resetButton = createButton("Zurücksetzen", 150, 30);
JButton resetButton = Setup.createGameBoardButton("Zurücksetzen", 150, 30);
resetButton.addActionListener(e -> {
saveStateForUndo();
resetBoard();
refreshBoard();
});
JButton undoButton = createButton("Undo", 80, 30);
JButton undoButton = Setup.createGameBoardButton("Undo", 80, 30);
undoButton.addActionListener(e -> {
int[][] previousState = stateManager.undo(board.getNumbers());
if (previousState != null) {
@ -82,7 +83,7 @@ public class GameBoard extends JPanel {
}
});
JButton redoButton = createButton("Redo", 80, 30);
JButton redoButton = Setup.createGameBoardButton("Redo", 80, 30);
redoButton.addActionListener(e -> {
int[][] nextState = stateManager.redo(board.getNumbers());
if (nextState != null) {
@ -93,7 +94,7 @@ public class GameBoard extends JPanel {
}
});
JButton validateButton = createButton("Validieren", 100, 30);
JButton validateButton = Setup.createGameBoardButton("Lösen", 80, 30);
validateButton.addActionListener(e -> {
if (validateCurrentBoard()) {
stopTimer();
@ -103,7 +104,7 @@ public class GameBoard extends JPanel {
}
});
JButton pauseButton = createButton("Pause", 100, 30);
JButton pauseButton = Setup.createGameBoardButton("Pause", 80, 30);
pauseButton.addActionListener(e -> {
stopTimer();
showPauseMenu();
@ -226,6 +227,37 @@ public class GameBoard extends JPanel {
}
}
private void saveHighscore() {
String playerName = JOptionPane.showInputDialog(this,
"Bitte geben Sie Ihren Namen ein:",
"Highscore speichern",
JOptionPane.PLAIN_MESSAGE);
// Überprüfen, ob ein Name eingegeben wurde
if (playerName == null || playerName.trim().isEmpty()) {
JOptionPane.showMessageDialog(this,
"Highscore wurde nicht gespeichert. Kein Name eingegeben.",
"Info",
JOptionPane.INFORMATION_MESSAGE);
return;
}
// Berechne die verstrichene Zeit
int elapsedTime = (int) ((System.currentTimeMillis() - startTime) / 1000); // Zeit in Sekunden
// Spielfeldname (oder eine Beschreibung)
String boardName = "Aktuelles Spielfeld"; // Falls ein spezifischer Name verfügbar ist, ersetzen
// Speichere den Highscore mit dem HighscoreManager
HighscoreManager.saveHighscore(playerName, elapsedTime, boardName);
// Zeige eine Bestätigung an
JOptionPane.showMessageDialog(this,
"Highscore erfolgreich gespeichert!",
"Erfolg",
JOptionPane.INFORMATION_MESSAGE);
}
private void returnToMainMenu() {
/// Eltern-Frame abrufen
JFrame parentFrame = (JFrame) SwingUtilities.getWindowAncestor(this);

View File

@ -2,12 +2,11 @@ package PR2.HitoriSpiel.GUI;
import PR2.HitoriSpiel.Domain.HitoriBoard;
import PR2.HitoriSpiel.Domain.HitoriSolutionLoader;
import PR2.HitoriSpiel.Utils.Setup;
import javax.swing.*;
import java.awt.*;
import javax.swing.JPanel;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Random;
@ -19,6 +18,7 @@ public class StartMenu extends JPanel {
public StartMenu(JFrame parentFrame) {
this.parentFrame = parentFrame;
setLayout(new GridBagLayout());
Setup.stylePanel(this); // Hintergrundfarbe setzen
//mainPanel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
@ -28,17 +28,16 @@ public class StartMenu extends JPanel {
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);
Setup.styleLabel(titleLabel);
add(titleLabel, gbc);
// 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 anschauen", 200, 30);
JButton exitButton = createButton("Spiel beenden", 200, 30);
JButton continueButton = Setup.createButton("Spiel fortsetzen", 300, 50);
JButton selectBoardButton = Setup.createButton("Spielfeld aussuchen", 300, 50);
JButton randomBoardButton = Setup.createButton("Zufälliges Spielfeld", 300, 50);
JButton highscorelistButton = Setup.createButton("Highscoreliste anschauen", 300, 50);
JButton exitButton = Setup.createButton("Spiel beenden", 300, 50);
add(continueButton, gbc);
@ -60,7 +59,7 @@ public class StartMenu extends JPanel {
JOptionPane.showMessageDialog(this, "Spiel fortsetzen wurde angeklickt");
}
private void selectBoard() {
protected void selectBoard() {
List<String> boardFileNames = BoardLoader.loadBoardsAsList();
System.out.println("Verfügbare Spielfelder: " + boardFileNames);
@ -96,7 +95,7 @@ public class StartMenu extends JPanel {
}
}
private void randomBoard() {
protected void randomBoard() {
List<String> boardFileNames = BoardLoader.loadBoardsAsList();
if (boardFileNames == null || boardFileNames.isEmpty()) {
JOptionPane.showMessageDialog(this, "Keine Spielfelder gefunden.", "Fehler", JOptionPane.ERROR_MESSAGE);
@ -109,16 +108,10 @@ public class StartMenu extends JPanel {
private void highscorelist() {
// TODO: Logik zur Anzeige der Highscoreliste implementieren
JOptionPane.showMessageDialog(this, "Highscoreliste wurde angeklickt");
new HighscoreDialog((JFrame) SwingUtilities.getWindowAncestor(this)).setVisible(true);
}
// Hilfsmethoden
private JButton createButton(String text, int width, int height) {
JButton button = new JButton(text);
button.setPreferredSize(new Dimension(width, height));
return button;
}
private void loadGameBoard(GameBoard gameBoard, List<String> solutionCoordinates) {
removeAll();

View File

@ -0,0 +1,113 @@
package PR2.HitoriSpiel.Utils;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Setup {
// Standardfarben
public static final Color BACKGROUND_COLOR = new Color(230, 230, 250);
public static final Color BUTTON_COLOR = new Color(75, 0, 130);
public static final Color BUTTON_TEXT_COLOR = new Color(230, 230, 250);
public static final Color BUTTON_HOVER_COLOR = new Color(64, 224, 208);
// Schriftart für Buttons
public static final Font BUTTON_FONT = new Font("Monospaced", Font.PLAIN, 18);
/**
* Erstellt einen standardisierten Button mit den voreingestellten Farben und Effekten.
*
* @param text Der Text des Buttons.
* @param width Breite des Buttons.
* @param height Höhe des Buttons.
* @return Der konfigurierte JButton.
*/
public static JButton createButton(String text, int width, int height) {
JButton button = new JButton(text);
button.setPreferredSize(new Dimension(width, height));
button.setBackground(BUTTON_COLOR);
button.setForeground(BUTTON_TEXT_COLOR);
button.setFocusPainted(false);
button.setFont(BUTTON_FONT);
// Hover-Effekt hinzufügen
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
button.setBackground(BUTTON_HOVER_COLOR);
button.setForeground(Color.BLACK); // Schriftfarbe ändern
}
@Override
public void mouseExited(MouseEvent e) {
button.setBackground(BUTTON_COLOR); // Hintergrundfarbe zurücksetzen
button.setForeground(BUTTON_TEXT_COLOR); // Schriftfarbe zurücksetzen
}
});
return button;
}
// Spezielle Farben für GameBoard
public static final Color GAME_BUTTON_COLOR = new Color(75, 0, 130);
public static final Color GAME_BUTTON_HOVER_COLOR = new Color(64, 224, 208);
public static final Color GAME_BUTTON_TEXT_COLOR = new Color(230, 230, 250);
// Schriftart für Buttons
public static final Font GAME_BOARD_BUTTON_FONT = new Font("Monospaced", Font.PLAIN, 14);
/**
* Erstellt einen Button mit Stil für GameBoard.
*
* @param text Der Text des Buttons.
* @param width Breite des Buttons.
* @param height Höhe des Buttons.
* @return Der konfigurierte JButton.
*/
public static JButton createGameBoardButton(String text, int width, int height) {
JButton button = new JButton(text);
button.setPreferredSize(new Dimension(width, height));
button.setBackground(GAME_BUTTON_COLOR);
button.setForeground(GAME_BUTTON_TEXT_COLOR);
button.setFont(GAME_BOARD_BUTTON_FONT);
button.setFocusPainted(false);
// Hover-Effekt
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
button.setBackground(GAME_BUTTON_HOVER_COLOR);
button.setForeground(Color.BLACK); // Schriftfarbe ändern
}
@Override
public void mouseExited(MouseEvent e) {
button.setBackground(GAME_BUTTON_COLOR);
button.setForeground(GAME_BUTTON_TEXT_COLOR); // Schriftfarbe zurücksetzen
}
});
return button;
}
/**
* Setzt den Hintergrund und die Schriftfarbe für ein JPanel.
*
* @param panel Das Panel, dessen Stil angepasst wird.
*/
public static void stylePanel(JPanel panel) {
panel.setBackground(BACKGROUND_COLOR);
}
/**
* Setzt die Farbe und Schriftart eines JLabels.
*
* @param label Das Label, dessen Stil angepasst wird.
*/
public static void styleLabel(JLabel label) {
label.setForeground(new Color(75, 0, 130));
label.setFont(new Font("Monospaced", Font.PLAIN, 30));
}
}

View File

@ -0,0 +1,4 @@
package PR2.HitoriSpiel.test.GUI;
public class PauseMenuTest {
}