簡體   English   中英

我已經調用paintComponent方法后如何在JPanel中繪制內容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM