我有一个JPanel
组件与JTable
在它里面。当我运行下面编写的代码时,表格会正确呈现和更新。一旦我尝试使用scrollPane
方法,该表根本不呈现。谁能向我解释这是为什么?
private static class GameHistoryPanel extends JPanel {
private DataModel model;
private JTable table;
private int currentRow;
private int currentColumn;
private final Dimension HISTORY_PANEL_DIMENSION = new Dimension(190,460);
public GameHistoryPanel() {
this.setLayout(new BorderLayout());
this.model = new DataModel();
this.table = new JTable(model);
this.add(table.getTableHeader(), BorderLayout.NORTH);
this.add(table, BorderLayout.CENTER);
// JScrollPane scrollPane = new JScrollPane();
// scrollPane.setViewportView(table);
// this.add(scrollPane);
setPreferredSize(HISTORY_PANEL_DIMENSION);
this.currentRow = 0;
this.currentColumn = 0;
}
public void increment(Board board, Move move) {
model.setValueAt(move, currentRow, currentColumn);
if(board.currentPlayer().getAlliance() == Alliance.WHITE) {
currentColumn++;
} else if (board.currentPlayer().getAlliance() == Alliance.BLACK) {
currentRow++;
currentColumn = 0;
}
validate();
repaint();
}
}
您似乎正在使用JTable
作为一个视图TableModel
其中每个细胞都处于两种状态之一。细胞应该发生明显的变化only来自模型的改变,这可以在准备细胞的过程中进行检查renderer http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender。特别是,调用方法validate()
and repaint()
should not需要。它们的存在表明您在模型不知情的情况下改变了视图,这可以解释所看到的异常现象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)