У меня есть скрипт, в котором пользователь нажимает один раз, чтобы начать 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);