Java 如何删除JPanel中仍然使用流布局的中间填充?

Java 如何删除JPanel中仍然使用流布局的中间填充?,java,swing,jpanel,padding,layout-manager,Java,Swing,Jpanel,Padding,Layout Manager,这是我的java应用程序GUI中有问题的部分 这个GUI由一个蓝色的JPanel(容器)组成,默认FlowLayout为LayoutManager,其中包含一个包含两个JPanel的框(删除水平间距,或者我可以使用setHgaps为零,而不是一个框),每个JPanel包含一个JLabel 下面是我创建GUI这一部分的代码 private void setupSouth() { final JPanel southPanel = new JPanel(); southPan

这是我的java应用程序GUI中有问题的部分

这个GUI由一个蓝色的JPanel(容器)组成,默认FlowLayout为LayoutManager,其中包含一个包含两个JPanel的框(删除水平间距,或者我可以使用setHgaps为零,而不是一个框),每个JPanel包含一个JLabel

下面是我创建GUI这一部分的代码

  private void setupSouth() {

    final JPanel southPanel = new JPanel();
    southPanel.setBackground(Color.BLUE);

    final JPanel innerPanel1 = new JPanel();
    innerPanel1.setBackground(Color.ORANGE);
    innerPanel1.setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT));
    innerPanel1.add(new JLabel("Good"));

    final JPanel innerPanel2 = new JPanel();
    innerPanel2.setBackground(Color.RED);
    innerPanel2.setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT));
    innerPanel2.add(new JLabel("Luck!"));

   final Box southBox = new Box(BoxLayout.LINE_AXIS);
  southBox.add(innerPanel1);
  southBox.add(innerPanel2);

    myFrame.add(southPanel, BorderLayout.SOUTH);
}
我的问题是如何去掉外部JPanel(蓝色的)和长方体之间的垂直填充

我知道这是填充,因为我读到“padding=元素从文本到边框(内部)的空格”

这不起作用,因为这是由于组件之间的间隙(空间)造成的。-

我试过了,但也没用

您只需在
流程布局中
,即

FlowLayout layout = (FlowLayout)southPanel.getLayout();
layout.setVgap(0);
默认的
FlowLayout
具有5个单位的水平和垂直间隙。在这种情况下,水平并不重要,因为
BorderLayout
正在水平拉伸面板

或者使用新的
流程布局
初始化面板。结果也一样

new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
编辑:

“我试过了,没用……”

为我工作

填补空白↑ 没有设置间隙↑

import java.awt.*;
import javax.swing.*;

public class Test {

    public void init() {
        final JPanel southPanel = new JPanel();
        FlowLayout layout = (FlowLayout)southPanel.getLayout();
        layout.setVgap(0);
        southPanel.setBackground(Color.BLUE);

        final JPanel innerPanel1 = new JPanel();
        innerPanel1.setBackground(Color.ORANGE);
        innerPanel1.add(new JLabel("Good"));

        final JPanel innerPanel2 = new JPanel();
        innerPanel2.setBackground(Color.RED);
        innerPanel2.add(new JLabel("Luck!"));

        final Box southBox = new Box(BoxLayout.LINE_AXIS);
        southBox.add(innerPanel1);
        southBox.add(innerPanel2);

        southPanel.add(southBox);   // <=== You're also missing this

        JFrame myFrame = new JFrame();
        JPanel center = new JPanel();
        center.setBackground(Color.yellow);
        myFrame.add(center);
        myFrame.add(southPanel, BorderLayout.SOUTH);
        myFrame.setSize(150, 100);
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setLocationByPlatform(true);
        myFrame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new Test().init();
            }
        });
    }
}
import java.awt.*;
导入javax.swing.*;
公开课考试{
公共void init(){
最终JPanel southPanel=新JPanel();
FlowLayout=(FlowLayout)southPanel.getLayout();
布局。设置间隙(0);
南面板。背景(颜色。蓝色);
最终JPanel innerPanel1=新JPanel();
内面板1.立根背景(颜色:橙色);
InnerPanel 1.添加(新标签(“良好”);
最终JPanel innerPanel2=新JPanel();
内板2.立根背景(颜色:红色);
innerPanel2.添加(新JLabel(“运气!”);
最终框南框=新框(框布局。线_轴);
添加(内部面板1);
添加(内部面板2);

southPanel.add(southBox);//我试过了,但没有成功,因为组件之间存在间隙。请发布一个可运行的示例,演示这个问题。根据这个答案,您可以放置
super(新的FlowLayout(FlowLayout.CENTER,0,0));
位于您的JPanel类的顶部。这将删除您正在编程的类中按钮之间的填充。您的代码不完整。您从未将southBox添加到面板,也从未将InnerPanel添加到南面板