如何清除数组列表并显示空JTable?

时间:2015-10-16 23:17:25

标签: java arrays swing multidimensional-array jtable

我目前正在制作老虎机游戏。

我有这样的历史功能。在我的课上,我有以下静态变量 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); 

现在我的问题是,每当用户按下“新游戏”时,上一个游戏的历史记录仍在显示。我该怎么做才能解决这个问题

1 个答案:

答案 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