我正在编写基于俄罗斯方块的游戏,并且我使用GridLayout来显示Tetris碎片掉落的实际轴。 GridLayout充满了小JLabel对象。轴本身就是另一个JPanel中的JPanel,我用它来控制和控制整个游戏。游戏结束时,我想让单词“GAME OVER”出现在网格顶部,可能还会附带一个小图片。我的竖井是ShaftPanel的一个实例,它扩展了JPanel(这样我可以重写paintComponent)并且是一个嵌套的私有类(因此它可以访问更大的JPanel的私有实例变量)。它需要访问的私有实例变量是布尔游戏,当游戏进入会话时是真实的,当游戏结束时设置为假。下面是我的ShaftPanel类的代码:在网格布局顶部绘制文本或图像
public class ShaftPanel extends JPanel {
public ShaftPanel(GridLayout g){
super(g);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
if(game)
return;
g.setColor(Color.WHITE);
g.setFont(new Font("Courier New", Font.BOLD, 15));
char[] c = {'G','A','M','E',' ','O','V','E','R'};
g.drawChars(c,0,c.length,45,45);
}
}
我已经在较大的类调用在适当的时候轴的重绘()方法中的一种方法。添加一个print语句表明paintComponent方法在我想要的时候被调用,并且setColor,setFont,drawChars方法都在正确的时间被调用。但是,什么也没有显示我高度怀疑文本正在JLabels的网格下方绘制,因此无法看到,但我不知道如何解决此问题。网格内的JLabel必须保持不透明,因为程序依赖于它们的不同颜色。有没有办法告诉paintComponent在面板上的其他任何东西上绘制文本?