2013-04-30 13 views
5

Während einige Probleme in meiner Anwendung zu untersuchen, finde ich nur einige seltsame Sache heraus.java swing JFrame Größe kehrt Dimension größer als Bildschirm

Grundsätzlich sollte diese SSCCE das Problem zeigen:

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

Irgendwie auf meine Auflösung von 1280x1024 Monitor führt dies zu:

java.awt.Dimension [width = 1296, height = 1010]

Wer weiß, wie dies geschieht? Vor allem die Tatsache, dass die Breite höher ist als was passieren soll.

Grüße.

+0

java.awt.Dimension [width = 1296, Höhe = 1000] Hier. :) Was ist dein Betriebssystem? –

+0

Windows Vista 64-bit, aber dein ist auch falsch, wenn es Breite sagt = 1296, nicht wahr? – skiwi

+0

Was ist dein Monitor? –

Antwort

5

Die Fensterrand wahrscheinlich 8 Pixel breit ist. Beim Maximieren skaliert Windows das Fenster so, dass der Clientbereich 1280 Pixel breit wird. Die gesamte Breite des Fensters beträgt dann 8 + 1280 + 8 Pixel = 1296 Pixel. Das gleiche passiert mit der Höhe.

wenn mehrere Monitore verwenden erweiterten Desktop auf, kann man feststellen, daß manchmal, wenn ein Fenster auf einem Bildschirm maximiert ist, kann das Fenster der Grenze auf benachbarten Bildschirmen zu sehen.

2

Nicht sicher, was dort passiert. Wenn Sie nur versuchen, den Rahmen zu setzen, um es auf den verfügbaren Bildschirm Immobilien basieren maximale Größe ist, versuchen Sie diese Alternative:

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