package dev.kske.chess.ui; import java.awt.BorderLayout; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.border.EmptyBorder; import javax.swing.table.DefaultTableModel; import dev.kske.chess.board.Log; import dev.kske.chess.board.Log.MoveNode; import dev.kske.chess.event.Event; import dev.kske.chess.event.EventBus; import dev.kske.chess.event.MoveEvent; import dev.kske.chess.event.Subscribable; /** * Project: Chess
* File: LogPanel.java
* Created: 17.07.2019
* Author: Kai S. K. Engelbart */ public class LogPanel extends JPanel implements Subscribable { private static final long serialVersionUID = 1932671698254197119L; private JTable mtable; private Log log; /** * Create the frame. */ public LogPanel() { setBorder(new EmptyBorder(5, 5, 5, 5)); setLayout(new BorderLayout(0, 0)); mtable = new JTable(); mtable.setEnabled(false); add(new JScrollPane(mtable), BorderLayout.CENTER); EventBus.getInstance().register(this); } @Override public Set> supports() { return new HashSet<>(Arrays.asList(MoveEvent.class)); } @Override public void handle(Event event) { if (log == null) return; // TODO: Display log with variations final List moves = /* log.getLoggedMoves() */ new ArrayList<>(); String[][] data = new String[moves.size() / 2 + moves.size() % 2][2]; for (int i = 0; i < data.length; i++) { data[i][0] = moves.get(i * 2).move.toSAN(); if (i * 2 + 1 < moves.size()) data[i][1] = moves.get(i * 2 + 1).move.toSAN(); } mtable.setModel(new DefaultTableModel(data, new String[] { "White", "Black" })); } public Log getLog() { return log; } public void setLog(Log log) { this.log = log; handle(null); } }