2012-02-27 6 views
5

Tôi muốn đặt kích thước Tối đa của JFrame khi khởi chạy ứng dụng. Vấn đề là, nếu độ phân giải màn hình càng lớn thì khung hình của tôi sẽ lớn hơn, nhưng tại thời điểm đó nó không được vượt qua phạm vi tối đa được xác định, nhưng trường hợp tương tự vẫn hoạt động tốt với độ phân giải thấp.Đặt kích thước tối đa của một khung hình JFrame khi khởi chạy ứng dụng

Giống như tôi muốn khung của tôi là có tối đa (500.500), vì vậy tôi đã viết đoạn mã này:

JFrame frame = new JFrame("FRAME TRANSPARENT"); 
frame.setSize((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()-50), (int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()-150)); 
frame.setMaximizedBounds(new Rectangle(0,0 , 500, 500)); 
frame.setVisible(true); 

Thậm chí tôi đặt Bound, JFrame đang xem xét phương pháp setSize và nó có vẻ là rằng nó đang bỏ qua phương thức setMaximizedBounds. Tôi đã thử với phương pháp setMaximumized nhưng có cùng đầu ra.

+1

Tại sao 'setMaximizedBounds' thay vì' setMaximumSize'? – wchargin

Trả lời

6

Tôi đã thử nó và bạn rất đúng rằng setMaximumSize() không hoạt động .. tất cả những năm này không thể có được khi biết rằng !!! Chủ yếu là yêu cầu của tôi về kích thước giới hạn được cố định bởi setResizable(false), mặc dù tôi thấy bạn có truy vấn cụ thể có kích thước tối thiểu và tối đa là khác nhau

Làm việc trên một giải pháp cho bạn mặc dù:

public class MaxSizeUI 
{ 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new MaxSizeUI().makeUI(); 
      } 
     }); 
    } 

    public void makeUI() { 
     final JFrame frame = new JFrame("Sample Fram") { 

      @Override 
      public void paint(Graphics g) { 
       Dimension d = getSize(); 
       Dimension m = getMaximumSize(); 
       boolean resize = d.width > m.width || d.height > m.height; 
       d.width = Math.min(m.width, d.width); 
       d.height = Math.min(m.height, d.height); 
       if (resize) { 
        Point p = getLocation(); 
        setVisible(false); 
        setSize(d); 
        setLocation(p); 
        setVisible(true); 
       } 
       super.paint(g); 
      } 
     }; 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300, 150); 
     frame.setMaximumSize(new Dimension(400, 200)); 
     frame.setMinimumSize(new Dimension(200, 100)); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

Điều này làm cho khung hình của bạn nhấp nháy trên màn hình khi nó đạt đến chiều rộng hoặc chiều cao tối đa. Trong một số trường hợp, nó đi vào một vòng lặp vô hạn ẩn mình và reshowing. –

0

sử dụng chiều
Dimension d=getMaximumSize(); Frame.setSize(d.width, d.height);

2

Một giải pháp có thể là:

Dimension DimMax = Toolkit.getDefaultToolkit().getScreenSize(); 
frame.setMaximumSize(DimMax); 

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);