消除JPanels之间的间隙

4
这里是我的问题:
如何消除内部矩形框(实际上是中间JPanel的边框)的间隙?
外部矩形是一个扩展的JCompoment。它包含三个JPanel。每个面板都使用GridLayout。我甚至尝试在大矩形中将setHgap设置为负值,但没有改变任何东西。
编辑:对不起,问题不清楚。我想要边框,但我不想要内边框和外边框之间的间隙。如果它们之间没有间隙,整个矩形将代表一个类图类。
4个回答

7
你可能是这么想的: 这里输入图片描述
import java.awt.*;
import javax.swing.*;

public class GridBadFrame {

    private JFrame frame;
    private JPanel pnlCenter;
    private JPanel pnl1;
    private JPanel pnl2;
    private JPanel pnl3;

    public GridBadFrame() {
        pnl1 = new JPanel();
        pnl1.setBackground(Color.red);
        pnl2 = new JPanel();
        pnl2.setBackground(Color.blue);
        pnl3 = new JPanel();
        pnl3.setBackground(Color.red);
        JLabel lblWest = new JLabel();
        lblWest.setPreferredSize(new Dimension(50, 150));
        JLabel lblEast = new JLabel();
        lblEast.setPreferredSize(new Dimension(50, 150));
        JLabel lblNorth = new JLabel();
        lblNorth.setPreferredSize(new Dimension(600, 50));
        JLabel lblSouth = new JLabel();
        lblSouth.setPreferredSize(new Dimension(600, 50));
        pnlCenter = new JPanel();
        pnlCenter.setBackground(Color.black);
        pnlCenter.setLayout(new java.awt.GridLayout(3, 0, 10, 10));
        pnlCenter.setPreferredSize(new Dimension(600, 400));
        pnlCenter.add(pnl1);
        pnlCenter.add(pnl2);
        pnlCenter.add(pnl3);
        frame = new JFrame();
        frame.add(pnlCenter, BorderLayout.CENTER);
        frame.add(lblNorth, BorderLayout.NORTH);
        frame.add(lblSouth, BorderLayout.SOUTH);
        frame.add(lblWest, BorderLayout.WEST);
        frame.add(lblEast, BorderLayout.EAST);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(100, 100);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                GridBadFrame gridBadFrame = new GridBadFrame();
            }
        });
    }
}

是的!那正是我想要的。哦,我明白你在那里做了什么!哈哈,那是一个相当巧妙的技巧。你故意在面板之间留下了一个间隙,这样中央面板的背景就会显示为分隔符。简单而实现了我想要的功能。干杯! - bili

2

实际上它是中间JPanel的边框

如果它是边框,那么移除它 (setBorder(null))。


1
我认为如果你尝试使用setBorderPainted(false),它可能会去掉不需要的边框。

1
这个问题不就是关于空间的吗?虽然你可以选择不给边框涂颜色,但组件仍会占据空间,只不过在空的情况下你看不到它而已! - gotomanners

0
问题可能与JPanel上的GridLayout设置的首选高度和宽度有关。
摘自文档

网格布局的首选宽度是容器中任何组件的最大首选宽度乘以列数,再加上水平填充乘以列数加一,再加上目标容器的左右插图。

网格布局的首选高度是容器中任何组件的最大首选高度乘以行数,再加上垂直填充乘以行数加一,再加上目标容器的顶部和底部插图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接