-1

我正在使用 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);

}

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

4

1 回答 1

0

我们在 mainJPanel(即框架 contentPane)上有一个 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);

感谢 MadProgrammer 的提示。

于 2013-05-26T13:45:21.180 回答