2013-05-30 58 views
2

我試圖重新掃描掃雷,但是一旦我將其他組件添加到屏幕中,像礦機計數器一樣,我在顯示按鈕後面的數字時出現問題。繪製到特定的JPanel

在這個特殊情況下,我有兩個JPanel。 我的第一個JPanel將包含多個組件,例如地雷計數器和另一個包含板的JPanel(由自定義JButton列組成的行數組)。

在我添加礦點計數器之前,一切似乎都正常,數字畫得很好,邏輯工作等等。但那不是我的問題所在。

在我的自定義JPanel(包含標籤,紙板等的面板)中,我騎着paintComponent()方法將數字打印到屏幕上。但是,一旦我添加了另一個JPanel,我需要將這些數字添加到屏幕上,我遇到了一些問題。首先,我不知道如何區分我正在繪製哪個面板,但我認爲我找到了一條線,例如:「g = boardPanel.getGraphics()」。如果這有效,我在別處遇到問題。 Mose很可能是因爲我已經構建了我的paintComponent()方法,但我不確定訂單的外觀。

這裏的一些代碼排序我得從什麼:

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g = boardPanel.getGraphics(); 

    //Draw the lines and numbers behind and separating the tiles. These, in my 
    //mind, are drawn to the graphics object regarding the playable board (the 
    //board, not the panel including the mine counter, etc.) But, when I click 
    //on a tile, there are no mine indicators behind it. 

} 

我猜想,在本質上,我只是不確定如何構造的paintComponent()方法,因爲我相信我有亂用兩種不同圖形對象,用於板面板和保存地雷數量和板面板的圖形對象。

任何幫助,將不勝感激。謝謝。

回答

2

您必須爲每個JPanel實現兩個不同的類。然後他們將擁有自己的paintComponent()方法,您不必「猜測」您正在繪製哪個JPanel。

而且我不會將每個瓦片作爲JButton實現,但這是另一個問題。

+0

好吧,有人說......如果我把它們放在不同的課程中,當用戶右擊瓦片降低地雷數量時,我將如何「傾聽」,因爲它們在不同的類別中?換句話說,我怎麼知道什麼時候更新它? – user2437891

+0

首先,爲每個JPanel添加一個MouseListener。將對您要通知的JPanel的引用傳遞給另一個JPanel,以便可以調用其上的一個方法來告訴它更改我的計數。就像這樣: '公共類MinePanel擴展JPanel { 公共MinePanel(OtherMinePanel panelToNotify){// 實施 ... }' – Frecklefoot

+0

這聽起來像它會工作,它是實現一個相當容易的事情。當我得到一些時間時,我會像這樣實現它,如果我成功實現它,我會結束這個問題。另外,我開始思考,你對按鈕是正確的。我只是爲了簡單而選擇了它們,但是我可以編寫自己的對象,效率會更高。如果我最終有問題,我會回來,但我不認爲我會。感謝Frecklefoot的幫助。 – user2437891