2013-04-30 140 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()); 
     } 
    }); 
    } 
}