【问题标题】:java swing can't expand JFrame's height?java swing不能扩展JFrame的高度?
【发布时间】:2012-10-27 11:06:57
【问题描述】:

我创建了一个 JFrame 并将一个 JPanel 设置为其内容面板,我在该容器中添加了大约 30 个按钮,但 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());
             }
        });
    }
}

【问题讨论】:

  • JPanel 的默认布局是FlowLayout,它将显示您描述的行为。
  • 为什么flowLayout不能扩展内容的高度?
  • 第一。尝试手动将窗口大小拖动到其他尺寸。让它更薄更高。看看会发生什么。
  • 实际上我可以将窗口的大小拖得更高,然后我可以看到按钮的波纹线。但是我想框架的大小会自动显示所有按钮行而不是仅一行按钮。
  • 好的——我的意思是FlowLayout 会很高兴地把组件放在下一个旁边,只要父容器可以变得更宽。它从不“尝试”使父容器更高,而是向父容器建议(当被问到时)它的首选宽度和高度是多少。该大小将基于单行组件。

标签: java swing height layout-manager pack


【解决方案1】:
  • JPanel 在 API 中实现了FlowLayout

  • FlowLayout 仅接受 PreferredSize,然后在 JPanel 中的 JComponents 不可调整大小

  • 看看GridLayout

  • 另一个选项是GridBagLayout 或今天的自定义MigLayout

【讨论】:

  • 实际上我并不是要调整 JPanel 中的 JComponents 的大小。只是框架的大小不是我想要的。框架只显示一行按钮,我需要手动将框架拖得更高,然后我才能看到下面的按钮行。实在想不通pack方法不能让frame做这种垃圾招数的原因。
  • 在 GridLayout(另一个提到)中,您将确定行和列,可调整大小/不可调整大小来自使用的布局管理器,取决于您的要求
  • 是的。但是当我使用 frame.pack 方法时,我对帧大小不会被其内容大小扩展的行为感到困惑。一定的网格布局可以解决这个问题。但是,流布局的行为只是扩展框架的宽度而不是高度,这不是很奇怪吗?
  • "..流布局的行为是不是很奇怪只是扩大了框架的宽度而不是高度?" 没那么奇怪。如果它去设置一个宽度,它会设置什么宽度?如果FlowLayout 提供了setPreferredWidth(int) 方法,这可能是可能的,..但它没有。顺便说一句 - 如果您按照其他 cmets 中的说明弄清楚了,您可以将解决方案作为答案发布并接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 2011-05-25
  • 1970-01-01
相关资源
最近更新 更多