Java 在另一个JPanel中包含JPanel的保证金

Java 在另一个JPanel中包含JPanel的保证金,java,swing,jpanel,margin,layout-manager,Java,Swing,Jpanel,Margin,Layout Manager,我正在使用JPanel模拟正方形。其想法是在JPanel前放置一种过滤器 第一个JPanel包含一个ImageIcon和一个背景色。 包含透明背景色的第二个JPanel放在第一个JPanel内 我做到了,但我有一个问题:第二个JPanel没有覆盖第一个JPanel的顶部出现了边距 编辑:代码 类JPanelImage扩展了JPanel private ImageIcon imageIcon = null; public void paintComponent(Graphics g) {

我正在使用JPanel模拟正方形。其想法是在JPanel前放置一种过滤器

第一个JPanel包含一个ImageIcon和一个背景色。 包含透明背景色的第二个JPanel放在第一个JPanel内

我做到了,但我有一个问题:第二个JPanel没有覆盖第一个JPanel的顶部出现了边距

编辑:代码 类JPanelImage扩展了JPanel

private ImageIcon imageIcon = null;
public void paintComponent(Graphics g)
{       
    if(imageIcon != null)
    {   
        Image image = imageIcon.getImage(); 

        int height = 30;
        int width = 18;

        int marginLeft = (this.getWidth()-width) / 2;
        int marginTop = (this.getHeight()-height) / 2;

        super.paintComponent(g);                        
        g.drawImage(image, marginLeft, marginTop, width, height, this);
    }
    else
        super.paintComponent(g);
}
public void addColoredLayout(Color color) {
    JPanelImage upperLayout = new JPanelImage();
    upperLayout.setOpaque(true);
    upperLayout.setBackground(color);
    upperLayout.setPreferredSize(this.getPreferredSize());

    this.add(upperLayout);

}

我还有一个Window类(扩展JFrame),可以创建一个JPanel并应用addColoredLayout方法。

我们在mainJPanel上有一个gridBagLayout(框架内容窗格),我们在mainJPanel上有一个JPanelImage(一个带有图像的JPanel)。当我们试图向这些JPanelImage添加一个JPanel时,我们遇到了他告诉你的问题

mainJPanel.setLayout(gridBagLayout);
gridBagLayout.preferredLayoutSize(this.getContentPane()); // this.getContentPane() = mainJPanel 
(...)
GridBagConstraints gridBagConstraints;
(...)
gridBagConstraints.gridy = i;
gridBagConstraints.gridx = j;
(...)
gridBagConstraints.insets = new Insets(0, 0, marginBot, marginRight);
gridBagConstraints.ipadx = 0;
gridBagConstraints.ipady = 0;
(...)    
mainJPanel.add(tmpJPanelImage, gridBagConstraints);
编辑:我刚刚找到了解决方案:

((FlowLayout) this.getLayout()).setVgap(0);

谢谢您的提示。

这可能是布局问题或边界问题。给我们展示一个例子,这样我们就可以确定我现在正在学习Java,所以我真的不知道布局的概念。因此,这可能是一个边界问题。。。