Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 网格布局填充_Java_Swing_User Interface_Gridbaglayout - Fatal编程技术网

Java 网格布局填充

Java 网格布局填充,java,swing,user-interface,gridbaglayout,Java,Swing,User Interface,Gridbaglayout,我正在使用GridBagLayout来(当前)显示两行。我知道这个布局对于这项任务来说太过了,但我正在努力学习如何使用它。问题是,我将两个面板添加到了两个单独的行中,内容周围有一个巨大的间隙(请参见下图和代码): 使用 对于weightx/weighty来说: 指定如何分配额外的水平/垂直空间 对于填充: 当零部件的显示区域较大时,使用此字段 大于组件请求的大小。它决定是否 调整组件大小,如果是,如何调整 不幸的是,使用GridBagLayout,如果内容没有填满它所在的整个容器,它会自动将所

我正在使用
GridBagLayout
来(当前)显示两行。我知道这个布局对于这项任务来说太过了,但我正在努力学习如何使用它。问题是,我将两个面板添加到了两个单独的行中,内容周围有一个巨大的间隙(请参见下图和代码):

使用

对于
weightx
/
weighty
来说:

指定如何分配额外的水平/垂直空间

对于
填充

当零部件的显示区域较大时,使用此字段 大于组件请求的大小。它决定是否 调整组件大小,如果是,如何调整


不幸的是,使用
GridBagLayout
,如果内容没有填满它所在的整个容器,它会自动将所有内容放在容器的中心。这就是为什么你会有很大的差距

基本上有两种方法可以解决此问题:

  • 困难的方法:摆弄
    网格约束
    。当我试图避免集中注意力的行为时,这方面的成功是有限的
  • 简单的方法是:将
    GridBagLayout
    放在
    FlowLayout
    的内部,然后将
    FlowLayout
    的对齐方式设置为左上角,或者任何您想要的方式
  • 上周的某个时候,我问过自己,也回答过自己

    因此,在您的示例中,您将使用
    GridBagLayout
    panel1
    middlePanel
    直接添加到JFrame(?)

    JFrame (GridBagLayout)
     - panel1
     - middlePanel
    
    我建议采用这种替代结构,以消除所有额外的空间(以及中心对齐,如果您愿意)


    HTH

    您也不能像那样重用
    约束。您需要为第二个面板创建一个新实例。-1此答案不正确。您需要做的是在GridBagConstraints上设置weightx和weighty属性。两者的默认值均为0.0,这将导致所有内容都“居中”,因为您接受了错误的answer@willcodejavaforfood我不同意:当有两种方法可以完成同一件事时,你不能认为两者都起作用时,其中一种是错误的。请注意,我确实承认使用
    GridBagConstraints
    可以实现这一点,只是我更喜欢另一种选择。
    constraints.fill = GridBagConstraints.BOTH;
    constraints.weightx = 1d;
    constraints.weighty = 1d;
    
    JFrame (GridBagLayout)
     - panel1
     - middlePanel
    
    JFrame (FlowLayout)
     - JPanel (GridBagLayout)
       - panel1
       - middlePanel