1

誰かが私を助けることができますか?私は感謝されます。サンプルコードがあります:

....
int sizeFile;
RandomAccessFile raf;
InputStream in; 
int val= 0; 
int downloaded= 0;                    
while((val=in.read(buff)) != -1)
{               
raf.write(buff, 0, val);    
downloaded+=  val;              
float wartosc = ((float) downloaded/ sizeFile) * 100;
prog.setValue((int)wartosc);                
}

私の質問は、どのように jprogressbar をセル テーブルに入れ、変数wartoscを更新するかです。

4

2 に答える 2

3

JTable のテーブル モデルには、ダウンロードのパーセンテージ値 (つまり、0 ~ 100 の数値) を保持する「ダウンロードの進行状況」列が必要です。

カスタム テーブル セル レンダラーをこの列に関連付ける必要があります。レンダラーは進行状況バーを使用して、テーブル セルに含まれるパーセンテージを表示します (つまり、valueの一意のメソッドの引数TableCellRenderer)。

プログレス バーを更新するには、テーブル モデルの適切なセルに新しい値を設定する必要があります。この変更により、 a がTableModelEvent起動されます ( a で自動的に行われますが、サブクラス化する場合はDefaultTableModel呼び出す必要があります)。イベントは JTable によって「キャッチ」され、値が更新され、表示する新しい値でレンダラーが呼び出されます。fireTableCellUpdatedAbstractTableModel

テーブルに関するスイングのチュートリアルを読んでください。

于 2011-08-31T10:41:43.423 に答える
2

あなたの質問を完全に理解しているとは言えませんが、ここから始めましょう...

ディスパッチ スレッドでダウンロードを行っていないと仮定すると (これは悪い考えです)、次の呼び出しを行います。

prog.setValue((int) wartosc);

おそらく でラップする必要がありますSwingUtilities.invokeLater

これは、Swing がスレッドセーフでなく、Swing フレームワークのオブジェクトに単一のスレッドからアクセスする必要があるためです。

于 2011-08-31T10:25:23.237 に答える