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

时间:2013-09-28 20:30:11

标签: 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(100, 100);

    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            Point point = frame.getLocationOnScreen();
            System.out.println(point);
        }
    });
}

在我看来,上面的代码必须产生(100,100),而是打印“java.awt.Point [x = 101,y = 128]”。

如何获得正确的(100,100)结果?

UPD:有时我得到(100,100)或(101,128)。我真的无法理解它的逻辑。

UPD:此代码的两次不同运行。 enter image description here

1 个答案:

答案 0 :(得分:3)

setLocation根据父级移动到x,y,getLocationOnScreen将根据屏幕获取位置...

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

http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#getLocationOnScreen() http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#getLocation() http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#setLocation(int,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

有时候你得到100,100,有时候得到101,128

JFrame.setLocation JFrame.getLocationOnScreen的不同行为 在Windows中,对于这种特殊情况,我总是得到100,100。