Java AWT对话框放置

Java AWT对话框放置,java,linux,awt,Java,Linux,Awt,我发现: 我被这部分弄糊涂了: Point pl = owner.getLocation(); d.setLocation( pl.x + ((int) (pd.getWidth() - dd.getWidth()))/2, pl.y + ((int) (pd.getHeight() - dd.getHeight()))/2 ); 的文档称,这将返回组件父级坐标空间中组件边界的左上角。由于此面板没有父面板,因此它似乎表示相对于屏幕左上角的

我发现:

我被这部分弄糊涂了:

    Point pl = owner.getLocation();
    d.setLocation(
        pl.x + ((int) (pd.getWidth() - dd.getWidth()))/2,
        pl.y + ((int) (pd.getHeight() - dd.getHeight()))/2
    );
的文档称,这将返回组件父级坐标空间中组件边界的左上角。由于此面板没有父面板,因此它似乎表示相对于屏幕左上角的坐标。同样,文档表明这些坐标也在父坐标空间中

当然,对话框的父对象是面板,因此在我看来,上面的代码是不正确的,在尝试将此对话框居中时,不应将pl.x/pl.y添加到坐标中。但是,事实上,对话框正确居中

我错过了什么


(这个问题的背景是,我正在维护一个windowmanager,Java应用程序的对话框经常放错位置。这表明我的代码是错误的,我正在试图找出原因/位置)

所有者是对话框的父级,而不是说
对话框是面板的父级,但在某种意义上,为了情态的目的,一个窗口拥有另一个窗口

Frame#getLocation
将返回屏幕上帧的位置
pd
所有者的(
Frame
s)大小,
dd
是对话框大小


当然,通过使用
所有者
的引用并将其传递给该方法

可以实现整个过程,谢谢您的回复-尽管它还没有完全回答我的问题。将pl.x和pl.y添加到传递给
d.setLocation
的坐标中,表明这些坐标相对于屏幕。但是,
setLocation
的文档表明它们与对话框的父级相关,该对话框不是屏幕,而是
owner
面板。这似乎是一个矛盾,我不知道如何解决。不,
pl.x
pl.y
将与对话框的内容窗格相对,它可能会
0x0
,因为面板将放置在“中心”位置,但会占用我刚才检查的大部分空间(不包括
p2
占用的空间),和
pl.x
pl.y
绝对是相对于屏幕的左上角。你怎么知道?它们的值是什么?我用调试器检查过,它们是相对于监视器左上角的X/Y坐标。您确定没有混淆
pl
p1
?查找一些最近的示例。认真地在Java1.2中,AWT被Swing有效地取代。由于在1.4中引入了
setLocationRelativeTo(null)
,因此没有必要查找宽度和高度组件的中心点。但是定位帧的最佳方法是Java 1.6中引入的
setLocationByPlatform(true)
    Point pl = owner.getLocation();
    d.setLocation(
        pl.x + ((int) (pd.getWidth() - dd.getWidth()))/2,
        pl.y + ((int) (pd.getHeight() - dd.getHeight()))/2
    );