我正在尝试将JDialog相对于内部JPanel中的JButton定位 - 我可以使用dialog.setLocationRelativeTo(button)
来完成,但对话框会覆盖按钮。我一直在尝试,但是没有成功,然后稍微移开对话框。
我发现了一些看似有希望的不同方法,然后只产生完全相同的结果,从设置相对位置(看似相互覆盖)后的setLocation(x,y)到获得屏幕上按钮的位置。
我很擅长这种东西,并且在过去的几天里问了几个问题,但是有没有人有任何提示,比如我应该在API中寻找什么?我应该考虑将相对于组件的坐标转换为屏幕坐标吗?这是我的下一个最佳猜测...但我不会撒谎,这绝对让我感到困惑。
答案 0 :(得分:3)
由于Component.getLocationOnScreen()
:
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
final JFrame f = new JFrame("test");
final JButton b = new JButton("Hello");
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(b, BorderLayout.NORTH);
f.setSize(300, 200);
f.setVisible(true);
b.addActionListener((e) -> {
JDialog dialog = new JDialog(f);
dialog.getContentPane().add(new JLabel(new Date().toString()));
dialog.pack();
Point point = b.getLocationOnScreen();
//dialog.setLocationRelativeTo(b); // Shows over button, as doc says
dialog.setLocation(new Point(point.x, point.y + b.getHeight()));
dialog.setVisible(true);
});
});
}
适合我...
Window.setLocationRelativeTo(...)
的文档说:
如果组件不为null并且显示在屏幕上,那么 窗口的位置就是窗口的中心 与组件的中心重合。
所以你得到的行为是正常的。
(希望我已正确理解你的问题)