Fully implemented CreativeGui class
parent
a36fb3b69d
commit
5dcdabb215
|
@ -1,5 +1,150 @@
|
||||||
package de.hs_mannheim.informatik.chess.view;
|
package de.hs_mannheim.informatik.chess.view;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class CreativeGui {
|
public class CreativeGui {
|
||||||
|
private JFrame frame;
|
||||||
|
private JLabel[][] fields = new JLabel[8][8];
|
||||||
|
private String selectedPiece = null; // z.B. "BLACK_KING", "WHITE_QUEEN"
|
||||||
|
private JTextField fenField;
|
||||||
|
private JButton flipBoardButton;
|
||||||
|
private JButton updateBtn;
|
||||||
|
|
||||||
|
// Unicode-Map für die Pieces (schneller Zugriff)
|
||||||
|
public static final HashMap<String, String> UNICODE_MAP = new HashMap<String, String>() {{
|
||||||
|
put("BLACK_KING", "\u265A"); put("BLACK_QUEEN", "\u265B");
|
||||||
|
put("BLACK_ROOK", "\u265C"); put("BLACK_BISHOP", "\u265D");
|
||||||
|
put("BLACK_KNIGHT", "\u265E"); put("BLACK_PAWN", "\u265F");
|
||||||
|
put("WHITE_KING", "\u2654"); put("WHITE_QUEEN", "\u2655");
|
||||||
|
put("WHITE_ROOK", "\u2656"); put("WHITE_BISHOP", "\u2657");
|
||||||
|
put("WHITE_KNIGHT", "\u2658"); put("WHITE_PAWN", "\u2659");
|
||||||
|
put("ERASER", "\u2716"); // oder anderes Icon zum Löschen
|
||||||
|
}};
|
||||||
|
|
||||||
|
private final Color LIGHT = new Color(0xe0e1dd);
|
||||||
|
private final Color DARK = new Color(0x778da9);
|
||||||
|
|
||||||
|
public CreativeGui() {
|
||||||
|
frame = new JFrame("Creative Mode");
|
||||||
|
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||||
|
frame.setSize(1200, 1000);
|
||||||
|
frame.setLocationRelativeTo(null);
|
||||||
|
|
||||||
|
JPanel mainPanel = new JPanel(new BorderLayout());
|
||||||
|
mainPanel.setBackground(LIGHT);
|
||||||
|
|
||||||
|
mainPanel.add(toolbarPanel(false), BorderLayout.NORTH);
|
||||||
|
mainPanel.add(boardPanel(), BorderLayout.CENTER);
|
||||||
|
mainPanel.add(toolbarPanel(true), BorderLayout.SOUTH);
|
||||||
|
mainPanel.add(fenPanel(), BorderLayout.EAST);
|
||||||
|
|
||||||
|
frame.setContentPane(mainPanel);
|
||||||
|
frame.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Toolbar: oben = schwarz, unten = weiß
|
||||||
|
private JPanel toolbarPanel(boolean white) {
|
||||||
|
JPanel panel = new JPanel();
|
||||||
|
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
|
||||||
|
panel.setBackground(new Color(0x1b263b));
|
||||||
|
|
||||||
|
String prefix = white ? "WHITE_" : "BLACK_";
|
||||||
|
String[] pieces = {"KING", "QUEEN", "ROOK", "BISHOP", "KNIGHT", "PAWN"};
|
||||||
|
|
||||||
|
for (String type : pieces) {
|
||||||
|
JButton btn = new JButton(UNICODE_MAP.get(prefix + type));
|
||||||
|
btn.setFont(new Font("Serif", Font.BOLD, 45));
|
||||||
|
btn.setFocusPainted(false);
|
||||||
|
btn.setBackground(white ? LIGHT : DARK);
|
||||||
|
btn.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||||
|
String key = prefix + type;
|
||||||
|
btn.addActionListener(e -> selectedPiece = key);
|
||||||
|
panel.add(btn);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Löschen-Button
|
||||||
|
JButton del = new JButton(UNICODE_MAP.get("ERASER"));
|
||||||
|
del.setFont(new Font("Serif", Font.BOLD, 40));
|
||||||
|
del.setBackground(Color.PINK);
|
||||||
|
del.setFocusPainted(false);
|
||||||
|
del.addActionListener(e -> selectedPiece = "ERASER");
|
||||||
|
panel.add(Box.createRigidArea(new Dimension(25, 0)));
|
||||||
|
panel.add(del);
|
||||||
|
|
||||||
|
return panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Schachbrett
|
||||||
|
private JPanel boardPanel() {
|
||||||
|
JPanel boardPanel = new JPanel(new GridLayout(8, 8));
|
||||||
|
boardPanel.setPreferredSize(new Dimension(800, 800));
|
||||||
|
boolean flip = false; // später per Button änderbar
|
||||||
|
|
||||||
|
for (int row = 0; row < 8; row++) {
|
||||||
|
for (int col = 0; col < 8; col++) {
|
||||||
|
JLabel label = new JLabel("", SwingConstants.CENTER);
|
||||||
|
label.setOpaque(true);
|
||||||
|
label.setFont(new Font("Serif", Font.BOLD, 70));
|
||||||
|
label.setBackground((row + col) % 2 == 0 ? LIGHT : DARK);
|
||||||
|
|
||||||
|
int r = row, c = col; // für Lambda final
|
||||||
|
label.addMouseListener(new java.awt.event.MouseAdapter() {
|
||||||
|
public void mousePressed(java.awt.event.MouseEvent evt) {
|
||||||
|
handleBoardClick(r, c);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
fields[row][col] = label;
|
||||||
|
boardPanel.add(label);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return boardPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FEN-Panel (rechts)
|
||||||
|
private JPanel fenPanel() {
|
||||||
|
JPanel panel = new JPanel();
|
||||||
|
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
|
||||||
|
panel.setBackground(new Color(0xe0e1dd));
|
||||||
|
panel.setPreferredSize(new Dimension(250, 150));
|
||||||
|
|
||||||
|
panel.add(new JLabel("FEN:"));
|
||||||
|
fenField = new JTextField("");
|
||||||
|
fenField.setFont(new Font("Monospaced", Font.PLAIN, 15));
|
||||||
|
panel.add(fenField);
|
||||||
|
|
||||||
|
updateBtn = new JButton("Update Board"); // Nicht mehr als lokale Variable!
|
||||||
|
updateBtn.addActionListener(e -> {/* TODO: set board from fenField.getText()! */});
|
||||||
|
panel.add(Box.createRigidArea(new Dimension(0, 10)));
|
||||||
|
panel.add(updateBtn);
|
||||||
|
|
||||||
|
return panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleBoardClick(int row, int col) {
|
||||||
|
if (selectedPiece == null) return;
|
||||||
|
if ("ERASER".equals(selectedPiece)) {
|
||||||
|
fields[row][col].setText("");
|
||||||
|
} else {
|
||||||
|
fields[row][col].setText(UNICODE_MAP.get(selectedPiece));
|
||||||
|
}
|
||||||
|
// TODO: Board-State/FEN updaten
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getter für Controller etc.
|
||||||
|
public JLabel[][] getFields() { return fields; }
|
||||||
|
public String getFenText() { return fenField.getText(); }
|
||||||
|
public void setFenText(String fen) { fenField.setText(fen); }
|
||||||
|
|
||||||
|
// CreativeGui.java
|
||||||
|
public JTextField getFenField() {
|
||||||
|
return fenField;
|
||||||
|
}
|
||||||
|
public JButton getUpdateButton() {
|
||||||
|
// Musst du im Konstruktor speichern (z.B. als Attribut), falls noch nicht!
|
||||||
|
return updateBtn;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue