0

アプリケーション用のカスタムSwingコンポーネントに取り組んでおり、を使用して描画を開始しましたpublic void paintComponent(Graphics g)。長方形を描くことができないという事実を除いて、すべてがうまく機能します。問題はgetX()andgetY()の部分にあると思いますが、それは確かではありません。これが私のコードです:

@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)と言っています。これが私が行っていることです。

残りの描画は完全に機能しますが、なぜこれが描画されないのか理解できません。助言がありますか?

4

1 に答える 1

3

コンポーネントがどのように定義されているかは正確にはわかりませんが、コンポーネントのメソッドのデフォルト値は、コンポーネントの左上隅のgetX()X座標(ルートコンポーネントに対する)です。

Swingでコンポーネントのメソッドを描画している場合、描画先のグラフィックスコンテキストの原点は通常、ルートコンポーネントではなく、コンポーネント自体の左上にあります。paintComponent(Graphics)

したがって、この呼び出しを行うことによって:

g.fillRect(getX(), getY(), getWidth(), getHeight());

コンポーネントのクリップ境界の外側に長方形を描画している可能性があります。

(たとえば、コンポーネントが100、100にあり、幅が20、高さが20の場合、絶対座標で描画している長方形はに(200, 200)なります(220, 220)

コンポーネント全体を含む長方形を描画する場合は、次のようなものを試してみてください。

g.fillRect(0, 0, getWidth(), getHeight());

これは、原点(おそらくコンポーネントの左上隅)からコンポーネントの幅と高さまで描画されます。

(前の例を使用:コンポーネントは100、100、幅/高さは20で、これが描画する長方形はにあり(100, 100)ます(120, 120)

これがお役に立てば幸いです=)

于 2012-05-23T22:55:35.100 に答える