【问题标题】:Java and layoutJava 和布局
【发布时间】:2012-01-09 13:16:06
【问题描述】:

我想在创建网页时像 DIV 标签一样从上到下使用 JPanel 之类的容器?如果我使用 BorderLayout,我只能有两个(NORTH 和 SOUTH)?

我想在每个 JPanel 中放置不同的 JButtonsJLabelsJTextFields。这是我想要做的布局:

Container1 及其内容

Container2 及其内容

Container3 及其内容

感谢您的帮助。

编辑:我添加了部分代码,因为我不确定我做得对吗?

JPanel container1, container2, container3;
container1 = new JPanel();
container2 = new JPanel();
container3 = new JPanel();

container1.setLayout(new BoxLayout(container1, BoxLayout.Y_AXIS));
container2.setLayout(new BoxLayout(container2, BoxLayout.Y_AXIS));
container3.setLayout(new BoxLayout(container3, BoxLayout.Y_AXIS));

// lägg till komponenter till containers
container1.add(button1);
container2.add(button2);
container3.add(button3);

// lägg till containers till fönster
frame.add(container1);
frame.add(container2);
frame.add(container3);

【问题讨论】:

    标签: java swing jpanel layout-manager


    【解决方案1】:

    听起来你想要BoxLayout 布局管理器。这个特殊的布局管理器使垂直堆叠组件变得非常容易。

    【讨论】:

      【解决方案2】:

      当您将列数设置为 1 时,您可以为此使用 GridLayout
      还有BoxLayout,当您使用 PAGE_LAYOUT 或 Y_AXIS 方向时应该会产生这种效果。

      这是 BoxLayout 的一些示例代码:

      Container container = frame.getContentPane( );
      frame.setLayout( new BoxLayout( container, BoxLayout.Y_AXIS ) );
      
      JPanel panel1 = new JPanel( );
      panel1.add( new JButton( "Button #1" ) );
      frame.add( panel1 );
      
      JPanel panel2 = new JPanel( );
      panel2.add( new JLabel("Label #1") );
      frame.add( panel2 );
      

      请注意,布局是在框架的内容窗格上设置的,而不是直接在框架上。如果尝试直接在 JFrame 上设置 BoxLayout,会出现“BoxLayout can't be shared”的错误。

      【讨论】:

      • BoxLayout 听起来很有趣,但是 JPanel 会覆盖所有空间吗?如果我使用背景颜色,它会覆盖盒子中的每个空间吗?
      • 我正在尝试代码并且有一些问题!我不应该在一开始就使用它吗:frame.setLayout(new BorderLayout());我应该像这样放置盒子: container1.setLayout(new BoxLayout(container1, BoxLayout.Y_AXIS)); container2.setLayout(new BoxLayout(container2, BoxLayout.Y_AXIS));我之间有很大的空间。顶部一个按钮,底部一个按钮!?我可以为盒子或面板设置一些尺寸吗? Container1 和 container2 是 JPanel 的实例
      • @3D-kreativ 请在您的问题中编辑代码作为更新。
      • @3D-kreativ 不需要设置BorderLayout;我已经更新了我的答案以反映这一点。
      • 嗯,我需要使用Container类和getContentPane吗?我认为在第 5 版之后就不需要这样做了吗?
      【解决方案3】:

      网页元素的行为与FlowLayout 所做的差不多:在一行中显示所有内容(水平或垂直),如果空间不足,则显示为多行。如果您想固定安排,请使用BoxLayout

      但请注意,如果您嵌套布局管理器,事情会变得有点棘手。这是article that explains it well

      【讨论】:

        猜你喜欢
        • 2010-12-15
        • 1970-01-01
        • 2021-07-24
        • 2019-02-05
        • 2011-04-20
        • 1970-01-01
        • 1970-01-01
        • 2012-09-24
        • 2011-09-12
        相关资源
        最近更新 更多