2013-04-30 6 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]ここでは、 :)あなたのOSは何ですか? –

+0

Windows Vista 64ビットですが、width = 1296と言うと間違っていますか? – skiwi

+0

あなたのモニターは何ですか? –

答えて

5

ウィンドウの境界は、おそらく8つのピクセル幅です。最大化すると、ウィンドウのサイズが変更され、クライアント領域の幅は1280ピクセルになります。ウィンドウの全幅は、8 + 1280 + 8ピクセル= 1296ピクセルです。同じことが高さに起こります。

複数のモニタで拡張デスクトップを使用すると、1つの画面でウィンドウが最大化されると、隣接する画面でそのウィンドウの境界線が見えることがあります。

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()); 
     } 
    }); 
    } 
} 
関連する問題