[英]How do I draw something in a JPanel after I already called the paintComponent method
我是用Java制作GUI的新手。 據我了解,有一個名為Graphics的類,它負責在JPanel中繪制圖形。 當我的應用程序啟動時,我調用paintComponent方法,該方法繪制了我正在編程的游戲的棋盤,paintComponent方法將Graphics g作為輸入。 但是,稍后,我想更新棋盤,那么當用戶執行類似單擊操作的操作時,如何告訴在游戲開始時繪制棋盤的同一個g繪制其他東西呢?
我相信這應該有一個非常簡單的答案。
每個JComponent(Swing組件)都有一個repaint()
方法,只需調用它即可告訴DrawingManager
重繪您的組件。
您所有的繪圖代碼都應該在paintComponent
方法中,這意味着您不會在其他任何地方繪制任何東西(您只能在paintComponent
的調用流程中進行繪制,您當然可以在方法中構造繪圖代碼)。
該方法需要訪問指示應該繪制什么和繪制位置的狀態。 這是因為OS可以請求重新繪制,然后僅調用JComponent
中的繪制方法。
當您在JComponent
上調用repaint()
時,繪圖線程將在短時間內調用您請求對其進行重繪的組件的paintComponent()
方法,並且您僅應在此繪圖線程中進行繪制。
嘗試repaint()或revalidate(),它應該可以工作。
我稱之為paintComponent方法
不,您永遠不要直接調用paintComponent()方法。 需要重繪組件時,Swing將為您調用該方法。
我想更新板子
然后,您需要一個“ setter”方法。 考慮其他Swing組件。 它們具有“ setForeground(),setBackground(),setText()”等方法。
因此,如果要更改組件,則需要創建適當的setter方法來更改類的屬性。 然后,在方法中保存屬性並僅調用repaint()
,Swing將重新繪制組件。 因此,現在您的paintComponent()方法需要檢查剛剛設置的屬性以進行適當的繪制。
public void setSomeProperty(Obect someProperty)
{
this.someProperty = someProperty;
repaint();
}
....
protected void paintComponent(Graphics g)
{
super.paintComponent();
// paint the board
if (someProperty != null)
// paint the property
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.