2013-04-30 75 views
5

Trong khi điều tra một số vấn đề trong ứng dụng của tôi, tôi chỉ phát hiện ra một số điều kỳ lạ.kích thước jframe java swing trả về kích thước lớn hơn như màn hình

Về cơ bản SSCCE này phải chứng minh vấn đề:

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

Bằng cách nào đó, trên màn hình có độ phân giải 1280x1024 của tôi, điều này dẫn đến:

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

Bất kỳ ai biết điều này đang xảy ra như thế nào? Đặc biệt là thực tế là chiều rộng là cao hơn so với những gì sẽ xảy ra.

Trân trọng.

+0

java.awt.Dimension [width = 1296, height = 1000] Đây. :) Whats hệ điều hành của bạn? –

+0

Windows Vista 64 bit, nhưng máy của bạn cũng sai nếu nói width = 1296, phải không? – skiwi

+0

Màn hình của bạn là gì? –

Trả lời

5

Đường viền cửa sổ có thể rộng 8 pixel. Khi tối đa hóa, Windows sẽ thay đổi kích thước cửa sổ sao cho vùng khách hàng rộng 1280 pixel. Toàn bộ chiều rộng của cửa sổ là 8 + 1280 + 8 pixel = 1296 pixel. Điều tương tự cũng xảy ra với chiều cao.

Khi sử dụng máy tính để bàn mở rộng trên nhiều màn hình, đôi khi có thể nhận thấy rằng khi cửa sổ được phóng to trên một màn hình, bạn có thể nhìn thấy đường viền của cửa sổ trên màn hình liền kề.

2

Không chắc chắn điều gì đang xảy ra ở đó. Nếu bạn chỉ cố gắng đặt khung của mình thành kích thước tối đa dựa trên bất động sản màn hình có sẵn, hãy thử phương án này:

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()); 
     } 
    }); 
    } 
} 
Các vấn đề liên quan