我目前正在制作老虎机游戏。
我有这样的历史功能。在我的课上,我有以下静态变量
static String[][] figureHistoryArray = new String [1000][4];
每次用户按下GUI中的“旋转”按钮时,都会激活一个名为slotSpin()的方法。
在这个方法中我有
figureHistoryArray[turnCounter][0]= rollOne.getFigureName();
figureHistoryArray[turnCounter][1]= rollTwo.getFigureName();
figureHistoryArray[turnCounter][2]= rollThree.getFigureName();
保存每个插槽旋转。
之后我在GUI中显示数据
private JTable historyTable;
在方法中:
historyPanel = new JPanel();
historyPanel.setLayout( new BorderLayout() );
getContentPane().add(historyPanel );
// Create columns names
String columnNames[] = { "Slot 1", "Slot 2", "Slot 3", "Win/Loss" };
String[][] dataValues= TheBigA.figureHistoryArray;
// Create a new historyTable instance
historyTable = new JTable( dataValues, columnNames );
// Add the historyTable to a scrolling pane
this.scrollPanel = new JScrollPane( historyTable );
historyPanel.add(this.scrollPanel, BorderLayout.CENTER );
add(historyPanel);
现在我的问题是,每当用户按下“新游戏”时,上一个游戏的历史记录仍在显示。我该怎么做才能解决这个问题
答案 0 :(得分:4)
现在我的问题是,每当用户按下“新游戏”时,上一个游戏的历史记录仍在显示。我该怎么做才能解决这个问题
不要创建任何新的Swing组件。
相反,当你开始一个新游戏时,你用一个空的TableModel加载表:
table.setModel( new DefaultTableModel(columnNames, 0) );
编辑:
那么如何更新我的表模型以引用这个新数组呢?
那么你可以这样做:
historyArray = new String[1000, 4];
table.setModel( new DefaultTableModel(historyArray, columnNames);
但是,你不应该真的这样做。数据应存储在TableModel中。您可以使用
动态地将数据添加到模型中model.addRow(...);
如果要保存数据,可以遍历TableModel以保存数据。
或者,如果您阅读JTable API,它建议您使用XMLEncoder来保存数据。查看此帖子,了解可用于保存/加载数据的通用解决方案:How to write a JTable state with data in xml file using XMLEndcoder in java