我正在使用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领域工作。怎么样?
答案 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()。其他一切都被它自己内在的世界观所抵消,这对我来说很有意义。
所以我想我所说的是在你得到鼠标坐标时要小心。