swing:适合简单情况的布局管理器?

swing:适合简单情况的布局管理器?,swing,layout,Swing,Layout,我有一个JPanel,我想用它来包含3个垂直组件: aJLabel aJTextField aJScrollPane 我希望所有3个组件都填充JPanel的宽度。我希望JLabel和JTextField使用它们的正常高度,JScrollPane使用其余高度 BoxLayout几乎可以正常工作,除了JTextField和JScrollPane在JPanel变大时共享“额外”空间 我能做什么?非常方便。你可以控制你需要的任何东西,你只能控制你需要的东西。您可能只对垂直参数感兴趣。非常方便。你可以控制

我有一个
JPanel
,我想用它来包含3个垂直组件:

  • a
    JLabel
  • a
    JTextField
  • a
    JScrollPane
  • 我希望所有3个组件都填充
    JPanel
    的宽度。我希望
    JLabel
    JTextField
    使用它们的正常高度,
    JScrollPane
    使用其余高度

    BoxLayout
    几乎可以正常工作,除了
    JTextField
    JScrollPane
    JPanel
    变大时共享“额外”空间


    我能做什么?

    非常方便。你可以控制你需要的任何东西,你只能控制你需要的东西。您可能只对垂直参数感兴趣。

    非常方便。你可以控制你需要的任何东西,你只能控制你需要的东西。您可能只对垂直参数感兴趣。

    创建边界布局。将JScrollPane放在其中心


    创建具有BoxLayout的JPanel。将JLabel和JTextField垂直放置在其中。将该JPanel放入BorderLayout的北侧。

    创建一个BorderLayout。将JScrollPane放在其中心

    创建具有BoxLayout的JPanel。将JLabel和JTextField垂直放置在其中。将该JPanel放入BorderLayout的北侧。

    您也可以按如下方式使用:

    DesignGridLayout layout = new DesignGridLayout(thePanel);
    layout.row().center().fill().add(theLabel);
    layout.row().center().fill().add(theTextField);
    layout.row().center().fill().add(theScrollPane);
    
    这应该和你描述的完全一样

    每次调用row()都会在面板中创建一个新行

    对fill()的调用确保每个组件使用整个可用宽度

    在此处使用DesignGridLayout的几个优点是:

    • 整个公司只有一名布局经理 面板
    • 自动边框和行间距
    您还可以使用以下方法:

    DesignGridLayout layout = new DesignGridLayout(thePanel);
    layout.row().center().fill().add(theLabel);
    layout.row().center().fill().add(theTextField);
    layout.row().center().fill().add(theScrollPane);
    
    这应该和你描述的完全一样

    每次调用row()都会在面板中创建一个新行

    对fill()的调用确保每个组件使用整个可用宽度

    在此处使用DesignGridLayout的几个优点是:

    • 整个公司只有一名布局经理 面板
    • 自动边框和行间距

    谢谢。。。当我愿意引入一个库时,我使用javabuilders+MiGlayout,这个问题实际上是关于内置布局管理器的,尽管我承认我没有这样说。谢谢。。。当我愿意引入一个库时,我使用javabuilders+MiGlayout,这个问题实际上是关于内置布局管理器的,尽管我承认我没有说明这一点。