Java Graphics 2D UI Стрелка Направление Головы - PullRequest
0 голосов
/ 18 октября 2010

Я хочу нарисовать стрелку, используя Graphic 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);

1 Ответ

2 голосов
/ 18 октября 2010

Java 2D координаты задаются в пользовательском пространстве, в котором верхний левый угол равен (0, 0). См. Координаты :

Когда используется преобразование по умолчанию из пользовательского пространства в пространство устройства, источником пользовательского пространства является верхний левый угол области рисования компонента. Координата x увеличивается вправо, а координата y увеличивается вниз, как показано на следующем рисунке. Верхний левый угол окна - 0,0. Все координаты указываются с использованием целых чисел, что обычно достаточно. Однако в некоторых случаях требуется использование плавающей запятой или даже двойной точности, которые также поддерживаются.

alt text

Я нашел 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);
    }
}

полный источник

alt text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...