2017-12-24 10 views
1

JTableでデータを行単位で表示するにはどうすればよいですか?私のデータは膨大なものになり、何千もの行があるので、行単位で表示したいので、ユーザーはその行が表示されていることを確認できます。行ごとにJTableを表示する

私はpaintrepaintvalidate、すべてのmodel.fire ...などのようなさまざまな方法を試してみたが、すべては終わりで追加された後にまだ私のテーブルには、データだけを表示します。

public void updateTableRowByRow(String row) { 
    // length of row always equals cols 
    int cols = 16; 
    int i = 0; 
    DefaultTableModel model = (DefaultTableModel) gui.myTable.getModel(); 
    Vector<String> rowData = new Vector<String>(); 
    for (int c = 0; c < cols; c++) { 
     rowData.add(String.valueOf(row.charAt(i++))); 
    } 
    model.addRow(rowData); 
    // tried many things here to get it to refresh but nothing worked 
} 

私は、このメソッドを呼び出す前に、私はテーブルをクリアします:すべてが追加された後

DefaultTableModel model = (DefaultTableModel) gui.myTable.getModel(); 
model.setRowCount(0); // delete all 
+0

あなた自身の 'TableModel'を実装してみませんか? – ThomasEdwin

+0

* "データが膨大になり、何千もの行が表示されるので、行単位で表示して、ユーザーに表示されるようにしたいと思います。*実際に大きなテーブルを試したことがありますか?つまり、データを取得すると1秒あたり100,000行が占めることになりますが、表自体はスマートで表示可能な行数は表示されますが、 60。そのレンダリングは、目の瞬きの中で行うことができます。 –

+0

@ThomasEdwin AbstractTableModelから拡張したカスタムテーブルモデルを作成しましたが、それも機能しませんでした。私が書いたaddRowメソッドにfireTableDataChangedを配置します。私はすべての行が追加された後にそれをリフレッシュする方法や何をすべきか分かりません:( – User1915

答えて

0

私のテーブルのデータだけを示して、私はこの方法をやっている方法の例終わりに

...

私の問題は、テーブルにそれらを追加する前に、データの前処理です。私はファイルを読んで、その内容を変換して、その内容を表に追加しています。

処理が完了するまでGUIが再描画されないようにするイベントディスパッチスレッド(EDT)で処理しています。

データの前処理に別のスレッドを使用する必要があります。これにより、新しいデータがテーブルモデルに追加されたときにGUIが再描画されるようになります。

これを行う最も簡単な方法は、SwingWorkerを使用することです。 Swingワーカーを使用すると、別のスレッドでデータを処理してから、そのデータをGUIに表示できるように「公開」することができます。

詳細と動作例については、Concurrency in SwingのSwingチュートリアルのセクションをお読みください。

関連する問題