所以这就是问题所在。我有一个由 3 个组合框、一个文本字段、几个按钮和一个 JTable 组成的 JDialog 框。JTable 信息根据文本字段和组合框进行过滤,因此例如它以所有数据开头,然后缩小为仅以用户决定的任何字符串值开头的数据。
但是发生的情况是,虽然值过滤正确,但如果我单击 JTable(在没有行的空白区域中),那么被删除的行会显示出来,就像在我单击它们之前它们是不可见的一样。我几乎试过了一切:每次单击过滤器时,我都尝试重新创建表(甚至不起作用的坏技巧),我已经调用了所有的重绘、重新验证、更改方法,我从头开始重写了对话框以确保我没有犯任何愚蠢的错误(如果我犯了一个,至少我没有找到它),并且我尝试将它们放在不同的线程上。我没有尝试过的唯一解决方法是使用摇摆工人,但那是因为我的过滤有点太复杂,我无法弄清楚什么去哪里以及如何正确扩展摇摆工人。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;
}
更新,我还从下面的评论中实现了过滤器,虽然它过滤掉了正确的数据,但它有完全相同的问题。不过,将来我可能会使用此过滤器功能,所以谢谢。
另一个更新,即使删除了除此块之外的所有内容,代码仍然失败,并且所有(至少我相信..)我在这里做的是做一个简单的删除行调用。希望这个对你有帮助。