75 lines
1.9 KiB
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);
|
|
}
|
|
}
|