Почему метод рисования Graphics не учитывает атрибуты обводки?

StackOverflow https://stackoverflow.com/questions/8401476

Вопрос

Я хочу создать настраиваемую границу с закругленными углами.

Код -

родовое слово

Результат -

введите описание изображения здесь

Как видите, Graphics.drawRect полностью игнорирует атрибуты BasicStroke.CAP_ROUND и BasicStroke.JOIN_ROUND.Почему?

Это было полезно?

Решение

Как описано в Изучение Java 2D, часть 1 :

<цитата>

java.awt.BasicStroke.CAP_ROUND: создает круговой колпачок с центром в конечной точке с диаметром, равным ширине пера.

Ключевое слово - «по центру». Я считаю, что всегда бывает так, что при рисовании толстыми штрихами Java2D центрирует толщину линии вдоль гипотетической бесконечно тонкой линии между центрами пикселей в начальной и конечной координатах. Например, при рисовании вертикальной синей линии толщиной 7 пикселей Java2D рисует по 3 пикселя с каждой стороны отрисовываемого гипотетического сегмента линии.

В вашем примере толщина составляет 5 пикселей. Вам нужно сместить координаты, чтобы полностью нарисовать обводку внутри графического клипа. При перемещении на 2 пикселя (или сгенерированном коде кода) закругленные углы становятся видимыми:

Скриншот графического интерфейса пользователя после перемещения на 2 пикселя

родовое слово

Другие советы

проблема заключается в смещении: вы фактически обрезаете границу посередине, чтобы углы не выглядели закругленными.Принимая это во внимание (здесь только для смещения, необходимо также настроить ширину)

родовое слово

< sizesЭдит

исправлен неряшливый подсчет пикселей :-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top