0

DefaultTableModel を使用して、単純なユーザー統計ページを表示しています。データをファイルに正常に保存しましたが、読み込めません (loadData()一番下の方法を参照してください)。したがって、プログラムを起動すると、ファイルが読み取られ、値がモデルに設定され、テーブル (JPanel 内) に既存のデータが表示されます。これが私のコードです。「間違っている」ように見えますが、どこにあるのかわかりません。誰か私に頭を上げてもらえますか?ありがとうIA

public class Statistics extends JPanel {
    public Object[][] data;
    public DefaultTableModel model;
    public PrintWriter saveStats;

public Statistics() {
    super(new GridLayout(1,0));
    String[] columnNames = {"Name", "Games Played", "Games Won"};
    Object[][] data = {};
    model = new DefaultTableModel(data, columnNames);
    JTable table = new JTable(model);
    table.setFillsViewportHeight(true);
    table.setVisible(true);
    table.setEnabled(false);

    JScrollPane scrollPane = new JScrollPane(table);
    add(scrollPane);
}

public void addRow(Object[] objects) {
    model.addRow(objects);

}

public void updateGamesPlayed(String userFolderName, int gamesPlayed) {
    int rowCount = model.getRowCount();
    int columnCount = model.getColumnCount();

    for (int i = 0; i < rowCount; i++){
        for(int j = 0; j < columnCount; j++){
            if (model.getValueAt(i,j) == userFolderName){
                int count = (Integer) model.getValueAt(i, j+1);
                count += gamesPlayed;
                model.setValueAt(gamesPlayed, i, j+1);
            }
        }
    }
    saveGameStats(model);
}

public void saveGameStats(DefaultTableModel model){
    this.model = model;

    File gameStats;
    try {
        gameStats = new File("GameStats.txt");


    System.out.print(gameStats);

    saveStats = new PrintWriter(gameStats);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    for (int i = 0; i < model.getRowCount(); i++){
        for (int j = 0; j < model.getColumnCount(); j++){
            saveStats.print(model.getValueAt(i,j)+ " ");
        }
    }
    saveStats.close();
}

public void loadData() {
    String name = "";
    int games = 0;
    int won = 0;
    Scanner loadData = new Scanner("GameStats.txt");
    while(loadData.hasNextLine()){
        if (loadData.hasNext()){
              name = loadData.next();}
            else if (loadData.hasNextInt()){
              games = loadData.nextInt();}
            else if (loadData.hasNextInt()){
              won = loadData.nextInt();}
        for (int i = 0; i < model.getRowCount(); i++){
            for (int j = 0; j < model.getColumnCount(); j++){
                model.setValueAt(name,i,j);
                model.setValueAt(games, i, j+1);
                model.setValueAt(won, i, j+2);
            }
        }
    }

}
}
4

2 に答える 2

1

いくつかのヒントをお勧めします。

  • この回答で指摘されているようdataに、ローカル変数によって隠されているクラス変数がまだあります。

  • Object[][] dataとにかく必要ないことに注意してください。DefaultTableModelこの方法であなたを初期化し、次のようmodel = new DefaultTableModel(columnNames, 0);に行を追加することができます: model.addRow(row)、ここrowObject[].

  • SwingWorkerを使用して、ファイルからテーブル モデルにデータを読み込むことを検討してください。この例を見てください:シンプルなバックグラウンド タスク

  • readLine()メソッドを使用してファイルを読み取る代わりに、BufferedReaderを使用することを検討してください。あなたのコードから、ファイルの各行がテーブルの行であると推測できます。行を取得し、この文字列を空白で分割し ( が得られます)、結果をモデルに追加します。ScannerString[]model.addRow()

于 2013-10-23T13:25:15.850 に答える