使用背景图像分层JPanels

时间:2011-01-31 15:45:10

标签: java swing

我想要一个背景图片和两个面板。据悉JLayeredpane是非常合适的。所以我在我的课程中扩展了一个JLayeredPane,并尝试从paint()中绘制图像。我搞定了。但当我在其上添加其他图层时,它们是不可见的。

我再次考虑从LayeredPane中删除bgimage,添加到它上面的第一层(在JPanel中)。现在图像不可见。为什么会这样?我想做一些像我提供的截图。请帮忙。

我的代码:

来自我的JFrame:

Container cp = this.getContentPane();
JLayeredPane backDropPanel = new JLayeredPane();    
cp.add(backDropPanel,BorderLayout.CENTER);
backDropPanel.add(new bgPanel(), new Integer(1),0);
backDropPanel.add(new itemScrollerPanel(), new Integer(1),0);

小组:

class bgPanel extends JPanel{
String imageLocation = "/home/phantom/Desktop/BackDrop3.jpg";
private Image bgImage;
bgPanel(){
    bgImage = new ImageIcon(imageLocation).getImage();
    setPreferredSize(new Dimension(800,500));
    setLayout(null);
    setOpaque(true);
}

public void paint(Graphics g){      
super.paint(g);
g.drawImage(bgImage,0,0,this);
}}

class itemScrollerPanel extends JPanel{
    itemScrollerPanel(){
    setBounds(0,100,200,200);
    setBackground(Color.RED);
    setOpaque(true);

}}

在这段代码中,我看到了itemsScrollerPanels绘制的RED BG。但不是bgPanel类的形象。

我的要求是这样的:

enter image description here

2 个答案:

答案 0 :(得分:0)

尝试将 setOpaque()更改为false,以便JPanel的所有像素都不会被绘制。因此使其透明。如果您仍然无法做到,请检查Jpanel是否实际上是不透明的或不使用 isOpaque()

答案 1 :(得分:0)

如果没有明确设置bgPanel大小,我会得到

System.err.println(bgPanel.getSize());
//java.awt.Dimension[width=0,height=0]

如果您从

更改代码

setPreferredSize(new Dimension(800, 500));

setPreferredSize(new Dimension(800, 500));
setSize(800,500);

你应该看到画面。