在整个JTable组件上右键单击MouseListener

时间:2012-01-17 23:15:30

标签: java swing jtable mouselistener jpopupmenu

我正在使用Netbeans,我设计了一个带JTable的窗口,并在JTable组件上添加了MouseEvent监听器,并添加了以下代码:

private void productsTableMousePressed(java.awt.event.MouseEvent evt) {
    if(evt.isPopupTrigger()) {
        tablePopupMenu.setLocation(evt.getXOnScreen(), evt.getYOnScreen());
        tablePopupMenu.setVisible(true);
        System.out.println("Fired!");
    }
}

private void productsTableMouseReleased(java.awt.event.MouseEvent evt) {
    if(evt.isPopupTrigger()) {
        tablePopupMenu.setLocation(evt.getXOnScreen(), evt.getYOnScreen());
        tablePopupMenu.setVisible(true);
    }
}

但只有当我点击一些细胞时它才有效。我想让它在整个JTable领域工作。怎么样?

3 个答案:

答案 0 :(得分:3)

  

但是只有当我点击某些单元格时它才有效,但我想让它在整个JTable区域上工作

MouseListener将适用于所有单元格。我不知道你是否应该使用setLocation(...)方法。

请参阅Bringing Up a Popup Menu代码示例。

或者更好的方法是使用:

table.setComponentPopupMenu(...);

答案 1 :(得分:3)

假设您的表位于JScrollPane中,它可能无法覆盖整个视口。为确保覆盖视口的整个区域,请在桌面上拨打setFillsViewportHeight(true)

答案 2 :(得分:0)

我发现在我的JTable中(在JScrollPane中,嵌套在JInternalFrame中),当JTable大于JScrollPane时,可能会出现滚动和调整大小的问题。

基本上,如果Frame位于我的左侧显示器上,但我将表格一直向右滚动,则弹出窗口会显示在我的右侧显示器上。

我查看了四种不同选项的结果: 框架和滚动窗格的getMousePositions(),以及鼠标事件getX和getXOnScreen()。

唯一一个给我我想要的结果的是框架的getMousePositions()。其他一切都被它自己内在的世界观所抵消,这对我来说很有意义。

所以我想我所说的是在你得到鼠标坐标时要小心。