如何在jtable中创建一行不可选?

时间:2013-03-23 11:17:42

标签: java swing jtable

我是第一次使用jtable。如何在执行操作后再次选择jtable中的特定行。我尝试了setRowSelectionAllowed(boolean)方法,但它适用于所有行。

1 个答案:

答案 0 :(得分:1)

将表格选择模型设置为不允许选择禁止行的列表选择模型:

class RestrictedSelector extends DefaultListSelectionModel {

  HashSet<Integer> forbiddenRows = new HashSet<Integer>();

  @Override
  public void addSelectionInterval(int index0, int index1) {
    for (int row = index0; row <= index1; row++) {
       if (forbiddenRows.contains(row)) {
         // You can also have more complex code to select still
         // valid rows here.
         return;
       }
    }
  }

 // Implement these in the same spirit:

 public void insertIndexInterval(int index0, int index1) 
 ...
 public void setSelectionInterval(int index0, int index1) 
 ...
 public void setLeadSelectionIndex(int leadIndex)      
 ...

 // and others, see below.
}

检查here是否包含必须覆盖的所有方法。

现在:

RestrictedSelector selector = new RestrictedSelector();

selector.forbiddenRows.add(NOT_THIS_ROW_1);
selector.forbiddenRows.add(NOT_THIS_ROW_2);

myTable.setSelectionModel(selector);

如果您的表行是可排序的,您可能还需要使用convertRowIndexToModelconvertRowIndexToView,因为它可能是模型中的行号,而不是表中的行号,必须禁止它们被选中