行示例

时间:2017-03-20 19:15:11

标签: java swing

我从其他问题中获取此代码,并希望有人可以澄清几点:

table.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseReleased(MouseEvent e) {
        int r = table.rowAtPoint(e.getPoint());
        if (r >= 0 && r < table.getRowCount()) {
            table.setRowSelectionInterval(r, r);
        } else {
            table.clearSelection();
        }

        int rowindex = table.getSelectedRow();
        if (rowindex < 0)
            return;
        if (e.isPopupTrigger() && e.getComponent() instanceof JTable ) {
            JPopupMenu popup = createYourPopUp();
            popup.show(e.getComponent(), e.getX(), e.getY());
        }
    }
});

我理解定义&#39; r&#39;获取鼠标事件点的行。但是为什么&#39; rowindex&#39;使用table.getSelectedRow()初始化?为什么不直接使用变量&#39; r&#39;。他们不是一样的吗?

也 - 我被e.isPopupTrigger()弄糊涂了。我阅读了文档,并将其称为返回mouseevent是否是弹出窗口的触发器....显然是名称中的技巧 - 但我不确定哪些条件使其成为真或假(尤其是popup.show(),其第一个参数是调用者,位于if语句中。

抱歉这令人困惑,我只是不想盲目地复制代码!

感谢

1 个答案:

答案 0 :(得分:2)

  

但为什么使用table.getSelectedRow()初始化'rowindex'?为什么不使用变量'r'。

代码正在检查鼠标点是否在表格的最后一行之后。使用时可能会发生这种情况:

table.setFillsViewportHeight(true);

并且您的表数据不会完全填充滚动窗格视口中的所有行。

因此,如果您在最后一行之后单击,rowAtPoint(...)方法将返回-1,这将与getSelectedRow()返回的行不同。

这将导致删除行选择。

现在,您可以使用getSelectedRow()方法确定是否有选定的行,从而显示弹出窗口。

  

我对e.isPopupTrigger()感到困惑。

用于显示弹出窗口的MouseEvent对于不同平台可能有所不同。