2013-04-30 17 views
5

Podczas sprawdzania jakiegoś problemu w mojej aplikacji, właśnie odkryłem jakąś dziwną rzecz.Jawa Jawa rozmiar powraca wymiar większy jako ekran

Zasadniczo SSCCE powinny wykazywać problem:

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

Jakkolwiek na monitorze rozdzielczość 1280x1024 powoduje to:

java.awt.Dimension [1296 szerokość, wysokość = = 1010]

Ktoś wie, jak to się dzieje? Zwłaszcza fakt, że szerokość jest większa niż to, co powinno się wydarzyć.

Pozdrawiam.

+0

java.awt.Dimension [szerokość = 1296, wysokość = 1000] Tutaj. :) Co twój system operacyjny? –

+0

Windows Vista w wersji 64-bitowej, ale Twoja jest również błędna, jeśli mówi szerokość = 1296, prawda? – skiwi

+0

Jaki jest twój monitor? –

Odpowiedz

5

Okno granica jest prawdopodobnie 8 pikseli szerokości. Podczas maksymalizacji system Windows zmienia rozmiar okna, aby obszar roboczy miał szerokość 1280 pikseli. Cała szerokość okna wynosi wtedy 8 + 1280 + 8 pikseli = 1296 pikseli. To samo dzieje się z wysokością.

Podczas korzystania z rozszerzonego pulpitu na wielu monitorach, czasami można zauważyć, że gdy okno jest zmaksymalizowane na jednym ekranie, granicę okna można zobaczyć na sąsiednich ekranach.

2

Nie jestem pewien, co się tam dzieje. Jeśli jesteś po prostu staramy się ustawić ramkę jest to maksymalna wielkość na podstawie dostępnego ekranu nieruchomości, spróbuj tego alternatywnego:

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()); 
     } 
    }); 
    } 
} 
Powiązane problemy