2012-02-27 85 views
5

我想在啓動應用程序時設置JFrame的最大大小。 問題是,如果屏幕分辨率越來越大,我的畫面越來越大,但當時它不應該跨越最大範圍,但同樣的情況在低分辨率下工作正常。在啓動應用程序時設置JFrame的最大大小

就像我希望我的框架是(500,500)最大的,所以我寫了這段代碼:

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

即使我設置了約束,JFrame中正在考慮的setSize方法,它似乎是它忽略了setMaximizedBounds方法。 我已經嘗試過setMaximumized方法,但得到了相同的輸出。

+1

爲什麼'setMaximizedBounds'而不是'setMaximumSize'? – wchargin 2013-05-07 04:46:18

回答

6

我嘗試過了,你是對的那setMaximumSize()不起作用..這些年來,不能讓知道!大多是我的極限尺寸的要求是setResizable(false)固定的,雖然我看你有沒有最小和最大尺寸的特定查詢是不同

他的工作是一個爲你解決,但:

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

當屏幕達到最大寬度或高度時,這會使屏幕在屏幕上閃爍。在某些情況下,它會陷入無限循環,隱藏自身並重新顯示。 – 2015-07-16 15:15:20

0

使用尺寸
Dimension d=getMaximumSize(); Frame.setSize(d.width, d.height);

2

一個可能的解決方案是:

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

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
相關問題