Java: Rectangle2D и отрицательные измерения - PullRequest
0 голосов
/ 24 сентября 2011

У меня есть скрипт, в котором пользователь нажимает один раз, чтобы начать Rectangle2D. Когда он перемещает мышь, прямоугольник обновляется с новыми координатами. Он щелкает снова, чтобы закончить это. Затем он сохраняется в ArrayList, и все эти предметы окрашиваются. Это все работает отлично; это не проблема.

Однако, если второй щелчок меньше первого (т. Е. getWidth() отрицателен), прямоугольник не отображается (как указано в документации ). Мой сценарий, чтобы исправить это не работает. Предполагается обнаружить отрицательные значения, а затем 1) уменьшить значение позиции и 2) сделать отрицательные значения положительными. Вместо этого он просто перемещает весь прямоугольник вверх или влево (в зависимости от того, какая ось отрицательна) и сохраняет его на уровне 1px.

Что не так?

private void resizeRectangle(final MouseEvent e) {
    double x = rectangle.getX(), y = rectangle.getY(), w = e.getX() - x, h = e.getY() - y;
    if (w < 0) {
        x = e.getX();
        w = -w;
    }
    if (h < 0) {
        y = e.getY();
        h = -h;
    }
    rectangle.setRect(x, y, w, h);
}

Спасибо!

ОБНОВЛЕНИЕ : Это ближе, но все еще не совсем работает:

double x = rectangle.getX();
double y = rectangle.getY();
double w = e.getX() - x;
double h = e.getY() - y;

if (w < 0) {
    x = e.getX();
    w = originalClickPoint.getX() - e.getX();
}
if (h < 0) {
    y = e.getY();
    h = originalClickPoint.getY() - e.getY();
}
rectangle.setRect(x, y, w, h);

Ответы [ 2 ]

3 голосов
/ 24 сентября 2011

Как только вы назначите новый прямоугольник, вы также сдвинете начало координат (то есть, когда кнопка мыши была нажата изначально) к текущей точке.Вам придется сохранить эту точку в отдельном поле (не в самом прямоугольнике).

x = Math.min(e.getX(), originalClickPoint.getX());
w = Math.abs(originalClickPoint.getX() - e.getX());

y = Math.min(e.getY(), originalClickPoint.getY());
h = Math.abs(originalClickPoint.getY() - e.getY());

Другой способ - не исправлять отрицательные значения ширины / высоты прямоугольника, а создавать новый (исправленный)один, когда вы рисуете.

1 голос
/ 24 сентября 2011

Взгляните на Пользовательские подходы к рисованию . Исходный код для примера DrawOnComponent показывает, как я это сделал.

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