2014-05-22 79 views
-1

如何重新繪製JPanel上的本地字段?我在寫一個蛇遊戲。當蛇移動到下一個單元格時,我們需要重新繪製僅更改的單元格(不是整個JPanel)。 Cell可以拋出PropertyChangeEvent對象,然後我可以調用repaint(x,y,h,w)方法。這是正確的方式嗎?JPanel中的局部重新繪製

+0

你的手機是什麼?這是一個小組嗎?即。整個網格是一個JPanel,還是所有單個單元都有很多JPanel? –

+0

單元格 - 帶有字段所有者的模型中的對象。當所有者更改Cell時拋出PropertyChangeEvent對象,然後im計算我網格上的座標。在我的JPanel im繪畫只有矩形網格(綁定在Field obj(兩層數組上的包裝))。 – user3435425

+0

我不能說出你的意思。你需要發佈一些代碼。 –

回答

0

首先,我假設你確實想用面板而不是表格,但我想你可能想看看JTable組件,因爲它可能更適合你的應用程序。

你的問題的答案是,你不應該明確要求重繪一個單元格。代替每個單元應被表示爲一個包含如下面的代碼一個JComponent子類的實例:

public class SnakeGameCell extends JComponent { 

    private boolean snakePresent; 

    public boolean isSnakePresent() { 
     return snakePresent; 
    } 

    public void setSnakePresent(boolean present) { 
     if (snakePresent != present) { 
      snakePresent = present; 
      repaint(); 
     } 
    } 

} 

換言之,各成分應當負責知道何時它應該被重新繪製和用於使這種情況發生在適當的時候。很難找到適合repaint()被「外部」調用的情況。換句話說,不要讓控制器類負責啓動重繪 - 使需要重繪的東西(組件)決定自己。

+0

10x10 JComponents加載CPU超過60%的網格.. – user3435425