Есть две школы мысли об этом.
Во-первых, любой многоугольник с отрицательным размером является бессмысленным и не должен отображаться - что вы имеете в виду, его ширина -10 пикселей?
Другое - отрицательное измерение просто инвертирует многоугольник на оси этого измерения.
В большинстве систем окраски применяется последняя логика. Мой опыт рисования на Java всегда был таким, хотя у меня не часто бывали отрицательные измерения, поэтому мой опыт может не иметь большого значения.
Что вы можете сделать:
- Возможно, вам потребуется, чтобы ваш друг обновил свою версию Java.
- В противном случае вы должны выполнить инверсию самостоятельно, проверив наличие отрицательного измерения и перенеся свое происхождение x, y, чтобы сделать измерение положительным. То есть прямоугольник [10,10, -5,5] пространственно эквивалентен [5,10,5,5]. Отрицательное измерение добавляется к исходной координате, а затем делается абсолютным. Обратите внимание, что это может привести к отрицательному происхождению, но, надеюсь, система рисования не испортит совсем .
Лично я предпочел бы потребовать более новую JVM, если это возможно.
В противном случае мой рекомендуемый код будет:
public void fillRect(Graphics gc, int x, int y, int width, int height) {
if(width <0) { x+=width; width =-width; }
if(height<0) { x+=height; height=-height; }
gc.fillRect(x,y,width,height);
}
Также обратите внимание, что вам понадобится аналогичное для других операций рисования.
Наконец, я бы с подозрением отнесся к еще одной ошибке во всем этом, поскольку поведение очень удивительно - я бы упростил все до минимальной тестовой программы с выводом отладки и проверял бы, прежде чем переносить дерьмовую загрузку примитивов рисования.