【问题标题】:Unselect JTable row when row index < 0当行索引 < 0 时取消选择 JTable 行
【发布时间】:2021-06-24 21:56:21
【问题描述】:

我的问题很简单,就是不知道怎么在google上查询。

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

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

(我已经在表格下方空白部分的行之外单击)

这是我的代码:

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 时我该怎么做呢?

【问题讨论】:

标签: java swing jtable row mouselistener


【解决方案1】:

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

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");
    }
}

【讨论】:

  • 我“可能”考虑在 else 条件下查看表中选定的行索引,但可以肯定的是,但我必须花一些时间查看事件通知工作流100%,否则,基本思路是正确的✅
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2015-05-30
  • 2011-10-24
  • 1970-01-01
  • 2018-10-30
  • 2023-03-24
相关资源
最近更新 更多