2013-09-28 33 views
3

我需要獲取JFrame位置以保存應用程序位置。但問題是getLocationOnScreen()返回不正確的結果。或者至少看起來如此。java JFrame getLocationOnScreen返回錯誤的結果? @ Ubuntu

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

+0

setLocation根據父級移動到x,y,getLocationOnScreen將根據屏幕獲取位置......但是...在這裏運行代碼後,我確實看到了100,100。你使用哪個Java版本? – porfiriopartida

+0

Java版本「1.7.0_25」 Java™SE運行時環境(版本1.7.0_25-b15) Java HotSpot™服務器虛擬機(版本23.25-b01,混合模式)Ubuntu 12.04 – ferrerverck

+0

有趣的是,我正在使用相同的Java版本,但在Windows中。似乎JFrame在Ubuntu中不是無父母的? – porfiriopartida

回答

3

setLocation移動到X,Y基於父,getLocationOnScreen將根據屏幕獲得位置...

沒有保證的getLocation和getLocationOnScreen將是相同..的getLocation是「相對「而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版本,您使用的? Mine是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這個特殊的情況。