【问题标题】:Mouse position of JDialog relative to JTableJDialog相对于JTable的鼠标位置
【发布时间】:2013-04-28 00:39:00
【问题描述】:

这是我的代码:

    JTable1.addMouseListener(new MouseAdapter() {
                      public void mouseReleased(MouseEvent e) {
                          if (e.getButton() == MouseEvent.BUTTON1)
                          {
                              JTable target = (JTable)e.getSource();
                              Point pMouse = new Point();
                              pMouse = target.getMousePosition();
                          }
                    }
               }

所以我正在检索相对于 JTable 的点(坐标)。因此,假设用户单击单元格中的某个位置,返回的点是 X=272 和 Y=50。所以现在我想通过这些坐标准确定位一个 JDialog 。我试过了:

jDialog1.setLocation(pMouse);
jDialog1.setVisible(true);

但这会将对话框定位在其他位置(屏幕坐标而不是表格)。有人对我如何相对于单元格定位 JDialog 有什么建议吗?

【问题讨论】:

  • 遵循标准 Java 命名约定。变量名称不以大写字符开头。那就是 JDialog1,应该是 jDialog1(实际上它应该是一个更具描述性的名称,但你明白了)。

标签: java swing position jdialog


【解决方案1】:

您正在使用与JTable 内容的客户区相关的坐标。您想要相对于整个窗口的全局坐标。为此,您可以使用:

Point location = MouseInfo.getPointerInfo().getLocation();
jDialog1.setLocation(location);

【讨论】:

  • 我不想设置为鼠标所在的位置,而是与单元格本身相关的位置
  • 但是当您单击单元格时,鼠标坐标将是单元格的坐标。使用的坐标需要基于全局坐标来定位对话框。结果将显示相对于单元格定位的对话框
【解决方案2】:

一般来说,用户应该能够通过鼠标或键盘来使用您的应用程序。如果用户点击该单元格会发生什么?他们应该看不到同一个对话框吗?因此,对于无论您是否使用鼠标都可以使用的更通用的解决方案:

SwingUtilities.convertPointToScreen(point, table);

查看 SwingUtilities 中的其他 convertXXX 方法以供将来参考。

或者,您可以随时使用:

Component.getLocationOnScreen();

然后在鼠标点上添加。

【讨论】:

    猜你喜欢
    • 2012-05-04
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2013-05-25
    • 2014-04-22
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多