1

だから私はJTableとして1つのパネルを持つ大きなカードレイアウトを持っています:

tbm = new DefaultTableModel();  
tbm.addColumn("Account Number"); 
tbm.addColumn("PIN"); 
tbm.addColumn("Access Level"); 
tbm.addColumn("Balance");
table = new JTable(tbm);
JScrollPane scrollPane = new JScrollPane(table);

actionPerformedの下で、次のようにいくつかのデータをテーブルにロードしようとしています。

else if(event.getSource() == listallButton) {
      String query = "SELECT * FROM ATM";
      String delimiter = ",";
      String input = "go";
      int count=0;
      al = new ArrayList<String>();

          try {
              communicationObject = new DataObject();
              communicationObject.setMessage(query);
              Socket socketToServer = new Socket("sunlab32.njit.edu",31414);
              ObjectOutputStream myOutputStream = new ObjectOutputStream(socketToServer.getOutputStream());
              ObjectInputStream myInputStream = new ObjectInputStream(socketToServer.getInputStream());
              myOutputStream.writeObject(communicationObject);
              communicationObject = (DataObject)myInputStream.readObject();
              input = communicationObject.getMessage();
              if (input != "stop") {
                  al.add(input);
                  data[count] = input;
                  count++; }

              for (int i=0;i<data.length;i++) {
                  row = data[i];
                  temp = row.split(delimiter);
                  tbm.addRow(new String[] {temp[0],temp[1],temp[2],temp[3]}); } 
              tbm.fireTableDataChanged();
              table.repaint();

今私の問題は、すべての行がロードされた後、テーブルが再描画されないことです...何か提案はありますか?

4

2 に答える 2

4

tbm.addModelテーブル変更イベントを発生させる必要があるため、tbm.fireTableDataChanged必要ありません。

ただし、すべての行を追加した後に強制的にペイントするために、これを行うことができます。

table.setModel(tbm);

オフトピック:

Swing はシングル スレッドのイベント モデルです。つまり、実行中のタスクは UI の更新をブロックします。

データの読み込みを SwingWorker に移動し、変更が完了したら UI にデータをプッシュすることをお勧めします。このチュートリアルを見てください

于 2012-05-01T03:42:44.270 に答える
1

電話する必要はありませんtbm.fireTableDataChanged();。モデル自体がaddRow()に応答してテーブルに通知します。テーブルとモデルが正しく接続されている場合、テーブルは自動的に更新されます。

このは役に立つかもしれませんDefaultTableModel

このコードは表示されないため、テーブルとスクロール ペインが正しく設定されていることを確認してください。また、クエリが実際にデータを返すことを確認してください。

于 2012-05-01T03:20:00.430 に答える