2013-04-30 131 views
5

在我的應用程序中調查了一些問題時,我發現了一些奇怪的東西。java swing jframe尺寸返回尺寸更大屏幕

基本上這SSCCE應該表現出的問題:

public class MainFrame extends JFrame { 
    public MainFrame() { 
     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     setExtendedState(JFrame.MAXIMIZED_BOTH); 
     pack(); 
    } 
} 

public class Main { 
    public static void main(String[] args) { 
     MainFrame mf = new MainFrame(); 
     mf.setVisible(true); 
     System.out.println(mf.getSize()); 
    } 
} 

不知何故,我的1280×1024分辨率的監視器上,這將導致:

java.awt.Dimension中[寬度= 1296,高度= 1010]

任何人都知道這是怎麼發生的?尤其是寬度高於應該發生的事實。

問候。

+0

java.awt.Dimension [width = 1296,height = 1000] Here。 :)什麼是你的操作系統? – 2013-04-30 17:07:54

+0

Windows Vista 64位,但如果它說寬度= 1296,你的也是錯的,對吧? – skiwi 2013-04-30 17:11:07

+0

你的顯示器是什麼? – 2013-04-30 17:35:42

回答

5

窗口邊框可能是寬8個像素。當最大化時,Windows調整窗口的大小,使客戶區的寬度達到1280像素。窗口的整個寬度是8 + 1280 + 8像素= 1296像素。高度也一樣。

在多臺顯示器上使用擴展桌面時,有時可能會注意到,在一個屏幕上最大化窗口時,可以在相鄰屏幕上看到窗口的邊框。

2

不知道那裏發生了什麼。如果你只是想設置你的框架是基於可用的屏幕房地產最大尺寸,試試這個另類:

import java.awt.*; 
import javax.swing.*; 

public class JFrameExtended 
{ 
    public static void main(String[] args) 
    { 
    SwingUtilities.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
     GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
     Rectangle maxBounds = env.getMaximumWindowBounds(); 

     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setBounds(maxBounds); 
     f.setVisible(true); 
     System.out.println("Frame size: " + f.getSize()); 
     } 
    }); 
    } 
}