我正在制作一个起始屏幕,并且它工作得非常好,在它启动时得到一个背景图像,现在我试图在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);
}
首先绘制图像,然后绘制按钮,但按钮仍然会在图像后面绘制。
答案 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()
。我刚尝试了这段代码,它对我有用。