簡體   English   中英

圖形未在paintComponent(Graphics)中繪制?

[英]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中使用ComponentpaintComponent(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.

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