2012-11-07 63 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方法。确定的网格布局可以解决这个问题。但是,对于流程布局的行为来说,扩展框架的宽度而不是高度是不是很奇怪? –