2013-10-10 35 views
0

我有一個複雜的JFrame。它有一個在絕對佈局中的主面板,其中包含按鈕和標籤,一對jFreeCharts和一個帶有特定GridLayout的第二個(子)面板,我填充了多個標籤。如何調整/縮小複雜的JFrame

有無論如何調整/放大整個事情嗎?

pack() does not work because of the layout. 

有沒有更基本的「ScaleTheWholeWindow」方法?

+0

您可以循環遍歷jframe中的所有元素,將它們的位置值和大小值乘以某個因子。然後遞歸地爲框架中的每個容器執行相同的操作。問題在於,你會得到非整數。你可能想要考慮如何解決這個問題。 在一天結束時,擺動是基於佈局的。你不應該使用絕對佈局。 – Cruncher

+0

請勿使用AbsoluteLayout! – camickr

+0

@camickr但是,如果我不使用AbsoluteLayout - 我怎麼能得到一個屏幕,看看我想要它? – ManInMoon

回答

2

我的評論代碼看起來像這樣something。我沒有測試這個,這更多的是一個想法。用代碼更容易表達我的想法。

public void scaleContainer(Container c, double xFactor, double yFactor) 
{ 
    Component[] eles = c.getComponents(); 
    for(int i = 0 ; i < eles.length ; i++) 
    { 
     eles[i].setBounds(new Rectangle(
      (int) eles[i].getX() * xFactor, 
      (int) eles[i].getY() * yFactor, 
      (int) eles[i].getWidth() * xFactor, 
      (int) eles[i].getHeight() * yFactor)) 
     if(eles[i] instanceof Container) 
     { 
      if(((Container)eles[i]).getLayout() == null) //If the container has it's own layout, let it assign it's own components 
       scaleContainer((Conatiner)eles[i], xFactor, yFactor); 
     } 
    } 
} 

如果你想一個固定數量的像素,而不是一個因素比例的,那麼你需要計算的因素。因子是1 + (extraWidth/previousWidth)(高度相似)

+0

這看起來對我很有希望。我如何知道幀大小發生了何種變化?即它何時變大? – ManInMoon

+0

您需要在框架內的面板上操作。不確定框架如何與setBounds一起工作。任何狀況之下。給定一個容器c,你可以做'x = c.getWidth(); scaleContainer(c,1.5,1.5); dx = c.getWidth() - x' – Cruncher

+0

您應該認識到,這不會縮放標籤的文本大小,因此在調整大小後可能會顯得很尷尬。 – Cruncher

-1

我不知道有一種方法可以做到這一點,但更好的方法是將函數設置爲每個元素的寬度/高度爲當前寬度/高度的百分比,這樣你會總是得到相同的佈局,而不是你所要求的基本佈局。

相關問題