java JFrame getLocationOnScreen返回错误的结果?@Ubuntu

java JFrame getLocationOnScreen返回错误的结果?@Ubuntu,java,swing,jframe,ubuntu-12.04,Java,Swing,Jframe,Ubuntu 12.04,我需要获取JFrame位置以保存应用程序位置。但问题是getLocationOnScreen()返回的结果不正确。或者至少看起来是这样 public static void main(String[] args) { final JFrame frame = new JFrame(); frame.setMinimumSize(new Dimension(200, 200)); frame.setVisible(true); frame.setLocation(

我需要获取JFrame位置以保存应用程序位置。但问题是getLocationOnScreen()返回的结果不正确。或者至少看起来是这样

public static void main(String[] args) {
    final JFrame frame = new JFrame();
    frame.setMinimumSize(new Dimension(200, 200));
    frame.setVisible(true);

    frame.setLocation(100, 100);

    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            Point point = frame.getLocationOnScreen();
            System.out.println(point);
        }
    });
}
在我看来,上面的代码必须产生(100100),但它会打印“java.awt.Point[x=101,y=128]”

如何获得正确的(100100)结果

UPD:有时我也会得到(100100)或(101128)。我真的不明白它的逻辑

UPD:此代码的两次不同运行。

设置位置根据父项移动到x,y,GetLocation屏幕将根据屏幕获取位置

无法保证getLocation和getLocationOnScreen是相同的。。getLocation是“相对的”,而getLocationOnScreen是绝对的

,int)

这是我对您的代码的输出:

java.awt.Point[x=100,y=100]
您使用的是哪个java版本?我的版本是1.7.0_25,也许JFrame的默认行为有所不同,因为顶部组件“应该”作为屏幕的父级

Update from comments:
java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) Server VM (build 23.25-b01, mixed mode) Ubuntu 12.04
有时你会得到100100,有时是101128

JFrame.setLocation JFrame.GetLocation在屏幕上的不同行为
在windows中,对于这种特殊情况,我总是得到100,100。

setLocation根据父项移动到x,y,getLocationOnScreen将根据屏幕获得位置。。。但是在这里运行代码后,我确实看到了100100。您使用的是哪个java版本?java版本“1.7.0_25”java(TM)SE运行时环境(build 1.7.0_25-b15)java热点(TM)服务器虚拟机(build 23.25-b01,混合模式)Ubuntu 12.04有趣的是,我使用的是相同的java版本,但在windows中。在Ubuntu中,JFrame似乎不是无父的?是的,1和28在某种程度上看起来像x window系统框架维度。很可能getLocation被委托给了内容窗格,这考虑到了框架边框占用的额外空间