2012-11-07 65 views
2

我創建了一個JFrame並將JPanel設置爲其內容面板,我在該容器中添加了大約30個按鈕,但JFrame向我顯示了一行按鈕,它不允許我擴展高度。java swing無法擴展JFrame的高度?

public class UIDemo{ 
    private JPanel contentPanel = new JPanel(); 
    private JButton buttons[] = new JButton[30]; 
    public UIDemo(JFrame frame){ 
     for(int i = 0; i < buttons.length; i++){ 
      buttons[i] = new JButton("Button"+Integer.toString(i)); 
      contentPanel.add(buttons[i]); 
     }//Add all buttons into content panel. 

     frame.setContentPane(contentPanel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
    public static void main(String[] args){ 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run(){ 
       new UIDemo(new JFrame()); 
      } 
     }); 
    } 
} 
+0

一個'JPanel'的默認佈局是'FlowLayout',它會顯示你所描述的行爲。 –

+0

爲什麼flowLayout無法擴展內容的高度? –

+0

1st。嘗試手動將窗口的大小拖動到其他尺寸。讓它更薄更高。走着瞧吧。 –

回答

2
  • JPanel已實施FlowLayout在API

  • FlowLayout只接受PreferredSize,然後在JPanelJComponents是不可調整大小

  • 具有看看GridLayout

  • 個另一個選項是GridBagLayout或今天定製MigLayout

+0

其實我並不是想調整JPanel中的JComponents。只是框架的大小不會是我想要的。框架只顯示一行按鈕,我需要手動拖動框架高度,然後我可以看到下面的按鈕行。我真的不明白爲什麼pack方法不能讓框架做這個垃圾伎倆。 –

+0

在GridLayout(另一個提到),你會確定行和列,可調整大小/不可修改來自使用的佈局管理器,取決於您的要求 – mKorbel

+0

是的。但我很困惑的行爲,幀大小不會擴大其內容大小,而我使用frame.pack方法。確定的網格佈局可以解決這個問題。但是,對於流程佈局的行爲來說,擴展框架的寬度而不是高度是不是很奇怪? –