我试过太多了,并且正在阅读很多东西。仍然无法找到我的案件的任何工作解决方案。所以这里是交易。游戏中,玩家的钱正在变化。我试图实现的是从JTable
即时显示钱币,所以玩家只需看着桌子就可以随时追踪他的钱。但是,正如你可以假设的那样,当它改变时我没有改变钱。它只停留在它开始的数量上。JTable中的数据不会改变
到目前为止,我得到的是一个精心打造的JTable
,它显示了玩家在开始时的初始资金以及我的JTable
的自定义模型。
因为我相信解决方案依赖于模型和setValuesAt(Object value, int row, int column)
,我试图找出一个出路。我到那里有一种叫做刷新的方法。更具体地说,让我告诉你一些我的代码。
因此,这里是在构造函数中我rowData阵列,我使用在游戏开始时显示的初始资金,其中:
rowData = new Object[][]{
{GameFlow.getPlayer1().getName(), "Pink", GameFlow.getPlayer1().getMoney()},
{GameFlow.getPlayer2().getName(), "Blue", GameFlow.getPlayer2().getMoney()},
{GameFlow.getPlayer3().getName(), "Green", GameFlow.getPlayer3().getMoney()},
{GameFlow.getPlayer4().getName(), "Red", GameFlow.getPlayer4().getMoney()},
};
因你们说,我还需要向你展示这两个以下功能,setValueAt和刷新(刷新的方法我只写了简单的更新变化):
public void setValueAt(Object value, int row, int col) {
rowData[row][col] = value;
fireTableCellUpdated(row, col);
}
public void refresh(){
for (int i = 0; i < 4; i++) {
setValueAt(GameFlow.getPlayer1().getMoney(), i, 2);
}
}
这里,在刷新,我只是试图改变第二(第2)行,因为前两是静态的,永远不会改变。另外,for循环中的数字4是玩家的数量,所以4保存行数。
您可以在整个下面我表型号代码中找到:
import javax.swing.table.AbstractTableModel;
public class MonopolyTableModel extends AbstractTableModel {
private String[] columnNames = {
"Name",
"Color",
"Money",
};
private Object[][] rowData;
public MonopolyTableModel() {
rowData = new Object[][]{
{GameFlow.getPlayer1().getName(), "Pink", GameFlow.getPlayer1().getMoney()},
{GameFlow.getPlayer2().getName(), "Blue", GameFlow.getPlayer2().getMoney()},
{GameFlow.getPlayer3().getName(), "Green", GameFlow.getPlayer3().getMoney()},
{GameFlow.getPlayer4().getName(), "Red", GameFlow.getPlayer4().getMoney()},
};
}
@Override
public int getRowCount() {
return rowData.length;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return rowData[rowIndex][columnIndex];
}
public void setValueAt(Object value, int row, int col) {
rowData[row][col] = value;
fireTableCellUpdated(row, col);
}
public String getColumnName(int columnIndex) {
return columnNames[columnIndex];
}
public void refresh(){
for (int i = 0; i < 4; i++) {
setValueAt(GameFlow.getPlayer1().getMoney(), i, 2);
}
}
}
这就是我在桂类如何使用:
MonopolyTableModel monoModel = (MonopolyTableModel) dataTable.getModel();
monoModel.refresh();
希望这些都足以证明,如果需要的话我可以展示更多,但因为这是一个我不想表现出色的学校项目。
考虑提供一个[可运行示例](https://stackoverflow.com/help/mcve),它演示了您的问题。这不是代码转储,而是您正在做的事情的一个例子,它突出了您遇到的问题。这会减少混淆和更好的反应 – MadProgrammer
您的'setValueAt'方法与实际的'player'对象没有任何关系,所以您在表中更改的任何值都不会影响'player'对象 – MadProgrammer
玩家的钱在游戏,我相信它。所以,setValueAt与更改播放器无关。我只是无法在桌面上刷新。当然,我会尽力为您提供更多的代码 –