当行索引 < 0 时取消选择 JTable 行

Unselect JTable row when row index < 0

我的问题很简单,就是不知道如何在google上查询这个。

我想要的只是在单击 JTable 上的一行时打印选定的行索引。

问题是如果我单击有效的行索引 (这是 index >= 0 && index < rowCount),然后我在 table 下部的有效行之外单击,它没有行(显然现在是 index < 0),打印的行索引是仍然是我单击的最后一个有效行索引。 我想要的是打印 "No row selected" 并在我单击没有行的 table 的下部空白部分时清除行选择。

(我已经在 table 下方空白部分的行外单击了)

这是我的代码:

JTable table = new JTable(new MyTableModel());
table.setFillsViewportHeight(true);

table.addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
        int rowIndex = table.getSelectedRow();
        if(rowIndex < 0) {
            System.out.println("No row selected");
            table.clearSelection();
        } else {
            System.out.println("Row " + rowIndex + " selected");
        }
    }
});

只有当我将 setFillsViewportHeight 设置为 false 或因为默认情况下为 false 而忽略它时,这个简单程序才按我希望的方式工作.

那么当 table.setFillsViewportHeight 设置为 true 时我该如何执行此操作?

您可以使用table.rowAtPoint(e.getPoint())获取点击的行。如果选择无效,它将 return -1 (当您单击 table 下方时):

public void mousePressed(MouseEvent e) {
    //Updated to use rowAtPoint
    int rowIndex = table.rowAtPoint(e.getPoint());

    //Existing code
    if(rowIndex < 0) {
        System.out.println("No row selected");
        table.clearSelection();
    } else {
        System.out.println("Row " + rowIndex + " selected");
    }
}