2013-04-30 8 views
5

Uygulamamdaki bazı sorunları araştırırken biraz garip bir şey öğrendim.java swing jframe size ekran boyutunda daha büyük bir boyut döndürür

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()); 
    } 
} 

şekilde, benim 1280x1024 çözünürlük monitörde, bu durum,:

Temelde bu SSCCE sorunu göstermelidir

java.awt.Dimension [genişliği = 1296, yükseklik 1010]

Bunun nasıl olduğunu bilen var mı? Özellikle, genişliğin, olması gerekenlerden daha yüksek olması.

Saygılarımızla.

+0

java.awt.Dimension [width = 1296, yükseklik = 1000] Burada. :) İşletim sisteminiz nedir? –

+0

Windows Vista 64-bit, ama aynı zamanda width = 1296 diyorsa, sizinki de yanlıştır? – skiwi

+0

Monitörünüz nedir? –

cevap

5

pencere sınır 8 piksel genişliğinde olasılıkla gerçek değildir. En üst düzeye çıkarıldığında, Windows, istemci alanını 1280 piksel geniş olacak şekilde yeniden boyutlandırır. Pencerenin tüm genişliği 8 + 1280 + 8 piksel = 1296 pikseldir. Aynı yükseklik için de geçerlidir.

Birden çok monitörde genişletilmiş masaüstünü kullanırken, bazen bir pencere bir ekranda en üst düzeye çıkarıldığında pencere kenarının bitişik ekranlarda görülebildiğini fark edebilir.

2

Orada neler olduğundan emin değilsiniz. Eğer sadece kullanılabilir ekran gayrimenkul dayalı maksimum boyut var için çerçeveyi ayarlamak için çalışıyorsanız, bu alternatifi denemek:

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()); 
     } 
    }); 
    } 
}