ここに問題があります。3 つのコンボ ボックス、テキスト フィールド、いくつかのボタン、および JTable で構成される JDialog ボックスがあります。JTable 情報は、テキスト フィールドとコンボ ボックスに基づいてフィルター処理されるため、たとえば、すべてのデータから始まり、ユーザーが決定した任意の文字列値で始まるデータのみに縮小されます。
ただし、値が正しくフィルタリングされている間に、JTable (行のない空白部分) をクリックすると、削除された行が、クリックするまで見えなかったように表示されます。ほぼ試しましたすべて:フィルターがクリックされるたびにテーブルを再作成しようとしました(うまくいかなかった悪いハック)、すべての再描画、再検証、firechangedメソッドを呼び出しました、確認するためにダイアログを最初から書き直しました私は愚かな間違いを犯したことはありません (もし私が間違いを犯したとしても、少なくともそれを見つけることはできませんでした)。私が試していない唯一の修正は、swing ワーカーを使用することですが、それは私のフィルタリングが少し複雑すぎて、何がどこにあり、swing ワーカーを正しく拡張する方法を理解できなかったためです。GUI は netbeans (bleh) によって生成され、私の他の十数個ほどの JDialogs で問題なく動作しました (実際には完全に)。フィルタリングを行う方法は次のとおりです。誰かがそれを助けることができれば、大歓迎です。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
nameFilter = "task1";
javax.swing.table.DefaultTableModel dm = (javax.swing.table.DefaultTableModel)jTable1.getModel();
tempParameters = parameters;
String currentString;
int rowNumber = 0;
while (dm.getRowCount()>rowNumber){
currentString = (String)(jTable1.getValueAt(rowNumber,1));
if(!nameFilter.equalsIgnoreCase(currentString.substring(0,nameFilter.length()))){
dm.removeRow(rowNumber);
parameters--;
}
else rowNumber++;
}
parameters = numOfRows;
}
更新、以下のコメントからフィルターも実装しました。正しいデータをフィルターで除外しましたが、まったく同じ問題がありました。将来的には、おそらくこのフィルター機能を使用する予定です。
別の更新、このチャンク以外のすべてを削除した後でもコードはまだ失敗しています。ここで行っているのは、単純な行の削除呼び出しを行っていることです。これが少し役立つことを願っています。