摆脱JPanels之间的差距

时间:2011-08-23 13:03:05

标签: java swing

这是我的问题

enter image description here

如何摆脱内部矩形框的间隙(它实际上是中间JPanel的边框)?

outter矩形是一个扩展JCompoment。里面包含三个JPanel个。他们每个人都使用GridLayout。我甚至尝试在大矩形中将Hapap设置为负值,但它不会改变任何东西。

编辑:对不起,问题不明确。我确实想要边框,但我不希望内边框和外边框之间有间隙。如果两者之间没有间隙,整个矩形将代表一个类图类。

4 个答案:

答案 0 :(得分:7)

你可能这样说:

enter image description here

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();
            }
        });
    }
}

答案 1 :(得分:2)

  

它实际上是中间JPanel的边界

如果是边框,请删除(setBorder(null))。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

摘自documentation

  

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

     

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