0

グラフィックfillpolygonを使用して矢印を描きたい。しかし、私の鏃頭は裏側にあります。何か案が?

int xpoints[] = { 20, 30, 30, 35, 25, 15, 20 };
int ypoints[] = { 10, 10, 30, 30, 45, 30, 30 };
int npoints = 7;
g2D.fillPolygon(xpoints, ypoints, npoints);
4

1 に答える 1

2

Java 2D座標は、左上が(0、0)であるユーザースペースで指定されます。座標を参照してください:

ユーザースペースからデバイススペースへのデフォルトの変換が使用される場合、ユーザースペースの原点は、コンポーネントの作図領域の左上隅です。次の図に示すように、x座標は右に向かって増加し、y座標は下に向かって増加します。ウィンドウの左上隅は0,0です。すべての座標は整数を使用して指定されますが、通常はこれで十分です。ただし、浮動小数点または倍精度が必要な場合もあり、これらもサポートされています。

代替テキスト

Java 2D-y軸を反転するアフィン変換を見つけたので、原点を左下に変換するように変更し、矢印と組み合わせました。

protected  void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2 = (Graphics2D) g;

    Insets insets = getInsets();
    // int w = getWidth() - insets.left - insets.right;
    int h = getHeight() - insets.top - insets.bottom;

    AffineTransform oldAT = g2.getTransform();
    try {
        //Move the origin to bottom-left, flip y axis
        g2.scale(1.0, -1.0);
        g2.translate(0, -h - insets.top);

        int xpoints[] = { 20, 30, 30, 35, 25, 15, 20 };
        int ypoints[] = { 10, 10, 30, 30, 45, 30, 30 };
        int npoints = 7;
        g2.fillPolygon(xpoints, ypoints, npoints);
    }
    finally {
      //restore
      g2.setTransform(oldAT);
    }
}

フルソース

代替テキスト

于 2010-10-18T18:10:55.870 に答える