5

我正在使用 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 区域工作。如何?

4

3 回答 3

3

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

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

有关示例代码,请参阅弹出菜单

或者更好的方法是使用:

table.setComponentPopupMenu(...);
于 2012-01-18T00:18:17.240 回答
3

假设您的表格位于 JScrollPane 内,它可能不会覆盖整个视口。为确保覆盖视口的整个区域,请setFillsViewportHeight(true)在您的桌子上打电话。

于 2012-01-18T07:35:24.920 回答
0

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

基本上,如果框架在我的左显示器上,但我已经将表格一直滚动到右侧,弹出窗口就会出现在我的右显示器上。

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

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

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

于 2013-05-11T01:14:55.357 回答