2017-06-12 63 views
1

我正在創建一個應用程序,如果在擴展\ minimizing時可以保持寬高比,我相信會更好。我將最小尺寸設置爲1000x800,並希望它保持5:4的比例。如何保持JFrame的高寬比

是否有一種方法已經或將需要我自己添加一個事件處理程序,檢查幀是否已被調整大小,它會給它最接近的大小?重複

PS.If問題是我很抱歉,我無法找到它

編輯

謝謝大家誰幫我完成這件事。這裏是我如何保持我的應用程序的大小,以滿足所用屏幕的大小,而不會太大或太小並保持縱橫比。 乾杯

int width = frame.getBounds().width; 
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
if (width > gd.getDisplayMode().getWidth()) 
    width = gd.getDisplayMode().getWidth(); 
while (width*4/5 > gd.getDisplayMode().getHeight()) 
    width = (int) (width - width*0.1); 
frame.setBounds(frame.getBounds().x, frame.getBounds().y, width, width*4/5); 
+1

坦白地說,保持內容的縱橫比會更容易和更簡單,消除窗口被系統最大化時可能發生的任何奇怪現象:P – MadProgrammer

+0

@MadProgrammer但是如果我這樣做,框架看起來很奇怪,我也不確定它是否可能,因爲除框架以外的所有組件的大小已由佈局管理器設置 –

+1

因此?首先設計一個佈局管理器,它着重於維護單個容器的比例,然後將其餘組件添加到該容器中。 – MadProgrammer

回答

2

試試這個:

@Override 
public void componentResized(ComponentEvent arg0) { 
    int W = 4; 
    int H = 3; 
    Rectangle b = arg0.getComponent().getBounds(); 
    arg0.getComponent().setBounds(b.x, b.y, b.width, b.width*H/W); 
} 
+0

重寫在什麼類? 'JFrame'(和它的父類)不實現這個方法 – MadProgrammer

+0

formComponentResized(java.awt.event.ComponentEvent evt){} – Shaine

+0

我們可以假設他們沒有使用某種形式的編輯器 – MadProgrammer