java - 在网格布局上绘制文本或图像

标签 java text overlap grid-layout paintcomponent

我正在编写一个基于俄罗斯方 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/

相关文章:

java - Spring MVC Hibernate文件上传错误

java - 尝试检查输入是否为整数时出现 java.lang.NullPointerException

html - 从背景中切割出像素线的文本

ruby - 无法在 Ruby 的字符串中按空格拆分/剥离,因为它是 NBSP 字符

wpf - 如何在文本框中显示多个带颜色下划线的文本

css - 窗口右侧的元素在窗口调整大小时重叠

java - 如何确定顶部是什么矩形?

java - struts 2 & sitemesh 中不同环境的不同资源文件root

html - 用边距重叠 HTML 中的表格单元格

java - 如何从项目中删除jar文件?