我正在编写一个基于俄罗斯方 block 的游戏,并且我正在使用 GridLayout 来显示俄罗斯方 block 掉落的实际轴。 GridLayout 充满了小 JLabel 对象。该轴本身是另一个 JPanel 内的 JPanel,我用该面板来包含和控制整个游戏。当游戏结束时,我希望“GAME OVER”字样出现在网格顶部,可能还伴有一个小图像。
我的轴是 ShaftPanel 的一个实例,它扩展了 JPanel(以便我可以重写 PaintComponent)并且是一个嵌套的私有(private)类(因此它可以访问较大 JPanel 的私有(private)实例变量)。它需要访问的私有(private)实例变量是 boolean game,当游戏处于 session 中时为 true,当游戏结束时设置为 false。这是我的 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);
}
}
我在较大的类中有一个方法在适当的时间调用轴的 repaint() 方法。添加 print 语句表明,paintComponent 方法在我想要的时候被调用,并且 setColor、setFont、drawChars 方法都在正确的时间被调用。然而,什么也没有出现。我高度怀疑文本是在 JLabels 网格下方绘制的,因此看不到它,但我不知道如何解决此问题。网格内的 JLabels 必须保持不透明,因为程序依赖于它们具有不同的颜色。有没有办法告诉paintComponent 在面板中的其他任何内容之上绘制文本?
最佳答案
请参阅 Swing 教程中 Using a Glass Pane 的部分有关玻璃板如何工作的示例和说明。
另一种选择是使用 JWindow 显示带有消息和图标的标签。
关于java - 在网格布局上绘制文本或图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6012245/