This repository has been archived on 2021-02-18. You can view files and clone it, but cannot push or open issues or pull requests.
chess/src/dev/kske/chess/ui/LogPanel.java

75 lines
1.9 KiB
Java

package dev.kske.chess.ui;
import java.awt.BorderLayout;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
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.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: <strong>Chess</strong><br>
* File: <strong>LogPanel.java</strong><br>
* Created: <strong>17.07.2019</strong><br>
* Author: <strong>Kai S. K. Engelbart</strong>
*/
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<Class<?>> supports() {
return new HashSet<>(Arrays.asList(MoveEvent.class));
}
// TODO: Implement support for variation selection
@Override
public void handle(Event<?> event) {
if (log == null || log.isEmpty()) return;
final DefaultTableModel model = new DefaultTableModel(new String[] { "White", "Black" }, 0);
for (Iterator<MoveNode> iter = log.iterator(); iter.hasNext();) {
String[] row = new String[] { iter.next().move.toLAN(), "" };
if (iter.hasNext()) row[1] = iter.next().move.toLAN();
model.addRow(row);
}
mtable.setModel(model);
}
public Log getLog() { return log; }
public void setLog(Log log) {
this.log = log;
handle(null);
}
}