为什么此 JPanel 始终处于领先地位?

Why has this JPanel always a top-gap?

我创建了一个带有 BorderLayout 的 JFrame 和一个面板在东边(蓝色)和一个在中间(绿色)。中间面板包含一个橙色面板,它总是保持正方形。

我只是想不通为什么风琴面板顶部总是有空隙(调整大小后也是如此),因为我根本没有设置任何空隙。 This is how it looks 这就是我尝试过的:

    public class Main {

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setMinimumSize(new Dimension(600+200, 600));
        frame.setLocationByPlatform(true);
        BorderLayout borderLayout = new BorderLayout();
        frame.setLayout(borderLayout);
        
        JPanel rightPanel = new JPanel();
        rightPanel.setBackground(Color.BLUE);
        rightPanel.setPreferredSize(new Dimension(200, 600));
        frame.add(rightPanel, BorderLayout.EAST);

        JPanel centerPanel = new JPanel();
        centerPanel.setBackground(Color.GREEN);

        SquarePanel squarePanel = new SquarePanel();
        squarePanel.setBackground(Color.ORANGE);
        centerPanel.add(squarePanel);

        frame.add(centerPanel, BorderLayout.CENTER);
        frame.setVisible(true);
    }
}


    public class SquarePanel extends JPanel {
    @Override
    public Dimension getPreferredSize() {
        Dimension d;
        Container c = getParent();
        if (c != null) {
            d = c.getSize();
        } else {
            return new Dimension(10, 10);
        }
        int w = (int) d.getWidth();
        int h = (int) d.getHeight();
        int s = (w < h ? w : h);
        if(s%8 != 0){       // make Dimensions stay multiples of 8
            s = s - s%8;
        }
        return new Dimension(s, s);
    }
}

不幸的是,boarderLayout.setVGap(0) 不起作用。

因为如果您不给 centerPanel 布局,我相信默认布局是 FlowLayout。 FlowLayout 会自动在元素周围创建填充。您需要为 centerPanel 提供这样的边框布局 centerPanel.setLayout(new BorderLayout());。面板不继承其父级的布局。

或者您可以尝试像这里 Java FlowLayout - Margin/padding of specific elements?

那样更改 FlowLayout 的填充