私はテトリスベースのゲームを書いています。GridLayoutを使用して、テトリスのピースが落下する実際のシャフトを表示しています。GridLayoutは小さなJLabelオブジェクトで埋められています。シャフト自体は別のJPanel内のJPanelであり、ゲーム全体を格納および制御するために使用しているパネルです。ゲームが終了したら、「GAME OVER」という単語をグリッドの上に表示し、小さな画像を添えて表示したいと思います。
私のシャフトはShaftPanelのインスタンスであり、JPanelを拡張して(paintComponentをオーバーライドできるように)、ネストされたプライベートクラスです(したがって、より大きなJPanelのプライベートインスタンス変数にアクセスできます)。アクセスする必要のあるプライベートインスタンス変数はブール値のゲームです。これは、ゲームがセッション中の場合は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()メソッドを呼び出すメソッドが1つあります。printステートメントを追加すると、必要なときにpaintComponentメソッドが呼び出され、setColor、setFont、drawCharsメソッドがすべて正しいタイミングで呼び出されていることがわかります。ただし、何も表示されません。テキストがJLabelsのグリッドの下に描画されているために表示されていない可能性が高いのですが、この問題を解決する方法がわかりません。プログラムは異なる色であることに依存しているため、グリッド内のJLabelは不透明のままにする必要があります。パネル内の他のものの上にテキストを描画するようにpaintComponentに指示する方法はありますか?