0

「結果」を非常に高速に検出する小さなアプリケーションがあり (結果の種類はここでは重要ではありませんが、1 秒あたり 10 を超える場合もあります)、それらを表のような形式または同様のものでユーザーに表示したいと考えています。そのために (JFrame 内で)スイングを使用しJTable、新しい結果を新しい行として挿入してから、メソッドを実行してもう一度下にスクロールします。

    Object[] data = new Object[6];
    //fill data-array
    ((DefaultTableModel) resultTable.getModel()).addRow(data);
    resultTable.scrollRectToVisible(resultTable.getCellRect(resultTable.getRowCount(), 0, false));

これは何とか仕事をしますが、Swing はビューを更新するときに少し遅れているようです。

それが起こらないようにする方法について何かアイデアはありますか?いくつかのスイング内部ペイント ロックと同期したり、別の方法を使用して結果を表示したりしますか?

4

1 に答える 1

2

適切なコードがなければ何が問題なのかを判断することはできませんが、Swing イベント スレッドで時間のかかる処理を行っていると推測されます (推測しなくて済むように、もっと表示してください)。その場合の解決策は、SwingWorker を使用して、Swing イベント スレッドまたは EDT で Swing 状態を更新しながらバックグラウンド スレッドで処理できるようにすることです。たとえば、SwingWorker のdoInBackground()メソッド内のループ内でデータを取得し、publish/process を使用してデータの各行を JTable のモデルにプッシュできます。

詳細については、レッスン: Swing での同時実行を参照してください。

より具体的なヘルプが必要な場合は、Minimal, Complete, and Verifiable Example Programを作成して投稿することを検討してください。

于 2016-09-04T20:01:44.587 に答える