From 324fbd5da48fb500b2338c7ca0504b4bf73ed8c6 Mon Sep 17 00:00:00 2001 From: POGROTH THE HYPED <82341064+magicalmonke@users.noreply.github.com> Date: Sat, 22 Jun 2024 08:58:08 +0200 Subject: [PATCH] Implement PuzzleView class --- .../me/taako/swt/prog2/view/PuzzleView.java | 73 ++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/taako/swt/prog2/view/PuzzleView.java b/src/main/java/me/taako/swt/prog2/view/PuzzleView.java index 880e98a..880ae20 100644 --- a/src/main/java/me/taako/swt/prog2/view/PuzzleView.java +++ b/src/main/java/me/taako/swt/prog2/view/PuzzleView.java @@ -1,4 +1,75 @@ package me.taako.swt.prog2.view; -public class PuzzleView { +import me.taako.swt.prog2.model.PuzzleModel; + +import javax.swing.*; +import java.awt.*; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.IntStream; + +public class PuzzleView extends JFrame { + private final List buttons = new ArrayList<>(); + private final PuzzleModel model; + + public PuzzleView(PuzzleModel model) { + this.model = model; + int gridSize = (int) Math.sqrt(model.getSize()); + + setLayout(new GridLayout(gridSize, gridSize, 5, 5)); + initButtons(); + setupWindow(); + } + + private void setupWindow() { + setTitle("Schiebe-Puzzle"); + setSize(400, 400); + setDefaultCloseOperation(EXIT_ON_CLOSE); + setVisible(true); + } + + private void initButtons() { + int size = model.getSize(); + IntStream.range(0, size) + .forEach(i -> { + JButton button = createButton(); + buttons.add(button); + add(button); + }); + + update(); + } + + private JButton createButton() { + JButton button = new JButton(); + button.setOpaque(true); + button.setBorderPainted(false); + return button; + } + + public List getButtons() { + return buttons; + } + + public void update() { + int size = model.getSize(); + Color correctColor = Color.GREEN; + Color incorrectColor = Color.ORANGE; + + IntStream.range(0, size) + .forEach(i -> { + JButton button = buttons.get(i); + int tile = model.getTile(i); + + if (tile != size - 1) { + button.setText(String.valueOf(tile + 1)); + button.setBackground(model.isTileCorrect(i) + ? correctColor + : incorrectColor); + } else { + button.setText(""); + button.setBackground(null); + } + }); + } }