[英]Graphics not drawing in paintComponent(Graphics)?
我正在為我的應用程序定制自定義的Swing組件,然后開始使用public void paintComponent(Graphics g)
進行繪制。 一切正常,除了我無法繪制任何矩形。 我認為問題出在getX()
和getY()
部分,但我不確定。 這是我的代碼:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (mouseEntered) {
g.setColor(HIGHLIGHTED_COLOR);
} else {
g.setColor(BACKGROUND_COLOR);
}
g.fillRect(getX(), getY(), getWidth(), getHeight());
//Draw rest of stuff (works fine)
API表示應該這樣使用: g.fillRect(x, y, width, height)
,這就是我正在做的事情。
其余的繪圖效果很好,但是我不知道為什么沒有繪圖。 有什么建議么?
我不完全相信你的組件是如何定義的,但對於一個組件的默認值的getX()
方法是組件的X坐標的左上角(相對於根組件)。
在Swing中使用Component的paintComponent(Graphics)
方法進行繪制時,要繪制到的Graphics上下文的原點通常位於Component本身的左上角,而不是根Component 。
因此,通過執行以下調用:
g.fillRect(getX(), getY(), getWidth(), getHeight());
您可能會在Component的剪輯邊界之外繪制矩形!
(例如,如果該組件位於100、100且其寬度為20且高度為20,則所繪制的矩形在絕對坐標下為(200, 200)
至(220, 220)
)
如果要繪制一個包含整個組件的矩形,則可能需要嘗試這樣的操作:
g.fillRect(0, 0, getWidth(), getHeight());
這將從原點(同樣,很可能是組件的左上角)向下繪制到組件的寬度和高度。
(使用先前的示例:組件位於100、100,並且寬高為20,要繪制的矩形位於(100, 100)
至(120, 120)
))
希望這可以幫助=)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.