我正在編寫基於俄羅斯方塊的遊戲,並且我使用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在面板上的其他任何東西上繪製文本?