Java Swing JTable以编程方式选择多行

时间:2013-03-21 19:25:15

标签: java swing jtable row selection

我有一个多行的JTable,每一行都是通过散点图上的Point显示的。我要做的是当在散点图上选择给定点时,我必须将此选择与JTable中相应行的选择相关联。

我有一个代表的Integer,我必须强调哪一行。

我尝试的是:

    JTable table = new JTable();
...
...// a bit of code where I have populated the table
...
   table.setRowSelectionInterval(index1,index2);

所以这里的问题是这个方法选择给定范围内的所有行[index1,index2]。我想选择例如行1,15,28,188等。

你是怎么做到的?

4 个答案:

答案 0 :(得分:11)

要仅选择一行,请将其作为开始和结束索引传递:

table.setRowSelectionInterval(18, 18);

或者,如果要选择多个非连续索引:

ListSelectionModel model = table.getSelectionModel();
model.clearSelection();
model.addSelectionInterval(1, 1);
model.addSelectionInterval(18, 18);
model.addSelectionInterval(23, 23);

或者,您可能会发现实现自己的ListSelectionModel子类并使用它来跟踪表和散点图上的选择是一个更清晰的解决方案,而不是监听散点图并强制表匹配。

答案 1 :(得分:3)

它也适用于不使用ListSelectionModel:

table.clearSelection();
table.addRowSelectionInterval(1, 1);
table.addRowSelectionInterval(15, 15);
table.addRowSelectionInterval(28, 28);
...

只是不要调用setRowSelectionInterval,因为它总是先清除当前选择。

答案 2 :(得分:1)

无法通过一个方法调用设置随机选择,您需要多个才能执行此类选择

table.setRowSelectionInterval(1, 1);
table.addRowSelectionInterval(15, 15);
table.setRowSelectionInterval(28, 28);
table.addRowSelectionInterval(188 , 188 );

等等......

答案 3 :(得分:1)

以下是实现此目的的通用方法:

public static void setSelectedRows(JTable table, int[] rows)
{
    ListSelectionModel model = table.getSelectionModel();
    model.clearSelection();

    for (int row : rows)
    {
        model.addSelectionInterval(row, row);
    }
}