JButton正在绘制一幅图像

时间:2011-04-12 13:41:54

标签: java image swing drawing jbutton

我正在制作一个起始屏幕,并且它工作得非常好,在它启动时得到一个背景图像,现在我试图在startmenu上绘制一个JButton,这是一个JFrame。但是当我运行程序时,按钮出现在背景图片后面。如果我将鼠标悬停在放置按钮的区域上方,则会闪烁,当我点击它时也会发生这种情况。有没有办法画出背景的按钮INFRONT?我在代码中将按钮作为最后一个。我的代码用于绘制背景和按钮:

    public void drawStartScreen(){
    startScreenOn = true;
    Graphics2D b = buffer.createGraphics();
    b.setColor( Color.WHITE );
    b.fillRect(0, 0, 800, 600);
    b.drawImage(start,0,0,null);

    setLayout( null );
    button = new JButton("Start Game");
    button.setBounds(10,10,100,100);
    button.setVisible( true );
    add(button);
}

首先绘制图像,然后绘制按钮,但按钮仍然会在图像后面绘制。

3 个答案:

答案 0 :(得分:2)

你正在混合绘画和添加组件,你绝对不应该这样做。而是在创建屏幕时或首次需要时添加组件,但请确保只执行一次。然后单独修改paintComponent()方法中需要绘制更改的组件。

答案 1 :(得分:2)

我建议你使用JLayeredPane(我只是作为最后的手段去自定义绘画)。

如果您仍然希望将“低级”绘画与“更高级别”JComponent层次结构混合,请查看具有多个图层的a question about JFrame。< / p>

答案 2 :(得分:0)

覆盖JFrame上的paint方法:

@Override
public void paint(Graphics g) {
    super.paint(g);
    Graphics2D b = (Graphics2D)g;
    b.setColor( Color.WHITE );
    b.fillRect(0, 0, 800, 600);
    b.drawImage(start.getImage(),0,0,null);
    b.dispose();        
}

请注意,完成后会在父级上调用paint(),在图形上下文中调用dispose()。我刚尝试了这段代码,它对我有用。