2011-05-16 101 views
1

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

回答

1

關於如何玻璃板的作品爲例,解釋見從Swing教程中的部分上Using a Glass Pane

另一種選擇是使用JWindow來顯示帶有消息和圖標的標籤。

1

我可能不會用這種方式製作俄羅斯方塊,但測試這種方法的一種方法是刪除「if(遊戲)」並查看遊戲結束是否正在寫入,即使沒有JLabels存在(除非它們總是有時是空白的)。

無論如何,我認爲可能有用,雖然我不認爲我曾經使用它是一個GlassPanel ....這是一個面板,可以覆蓋在您當前的JFrame etx ...

在這裏尋找更多的代碼和信息:http://www.java2s.com/Code/Java/Swing-JFC/Paintonglasspane.htm