簡體   English   中英

您不需要 Canvas 或 JPanel 來繪制?

[英]You don't need a Canvas or JPanel to draw?

我一直認為在 JFrame 上放置圖形需要使用 Canvas 或 JPanel,但是我之前看過一個視頻,其中該人在擴展 JFrame 的同時使用油漆(圖形 g)並且沒有制作面板或帆布。 如果是這種情況,為什么人們要費心制作 Canvas 或 JPanel?

JFrameFrame ,后者繼承自Window ,后者繼承自Container ,繼承自Component ,后者定義了paint

如果是這種情況,為什么人們要費心制作 Canvas 或 JPanel?

要回答這個問題,您需要更好地了解JFrame (和基於窗口的類)。

復雜的

JFrame實際上是一個復合組件,也就是說,它由許多提供窗口核心功能的其他組件組成

JRootPane

這意味着,如果您覆蓋paint並在框架上執行自定義繪制,則很可能您將繪制在子組件上或子組件將繪制在其上,並且由於繪制子系統的工作方式,會這樣做在沒有調用框架的paint方法的任何時候。

裝飾

框架包括其可用區域內的窗戶裝飾。 這意味着“可視”區域實際上小於框架的定義區域。

這也是為什么推薦使用pack而不是setSize

這意味着,如果您覆蓋paint您實際上可以在窗戶裝飾下進行繪畫(是的,這種情況一直發生,我們已經厭倦了回答)

裝飾下的繪畫

我如何在中間設置的屏幕截圖

JFramecontentPane負責這一點,因為它位於可視區域內。

雙緩沖

頂級容器,如JFrame不是雙緩沖的,因此,即使您克服了上述所有問題,您也會獲得閃爍的更新。 當然你可以“設計”你自己的雙緩沖算法,但在 Swing(即JPanel )中,它是免費的,所以為什么要麻煩

鎖定

作為一般建議,我們通常不鼓勵從JFrame (或其他頂級容器)擴展,因為它會將您鎖定在單個用例中並防止重用的可能性。

另一方面,如果您使用JPanel ,則可以隨時將其添加到您想要的任何容器中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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