Как создать пунктирную линию, которая чередует два цвета?

Я использую JFreeChart и хочу построить ряд данных, используя линию, которая чередуется между серыми и черными штрихами, без пробелов между ними. т.е. серыйчерныйсерыйчерныйсерыйчерный

JFreeChart будет принимать только объект AWT Stroke или Shape в качестве метода рендеринга серии.

Насколько я понимаю, BasicStroke может иметь только один цвет и чередоваться между непрозрачным и прозрачным. Есть ли другой класс, который реализует Stroke, который позволяет использовать несколько цветов? Или есть другой способ решить эту проблему?


person GenericJon    schedule 05.08.2011    source источник


Ответы (3)


У меня была аналогичная проблема с JFreeChart. В итоге я просто расширил соответствующий график и переопределил некоторые методы рисования. Это не идеальное решение, но есть просто ограничения на то, что вы можете делать с JFreeChart.

person M Platvoet    schedule 05.08.2011
comment
Я бы посчитал это крайней мерой, но вполне выполнимой. - person trashgod; 09.08.2011

Я рискну быть сбитым с толку здесь, потому что я Android-программист без особого опыта работы с AWT или JFreeChart, но я попробую.

Можете ли вы создать свою пунктирную линию, которая чередует два цвета, наложив две пунктирные линии и сместив штриховую фазу одной из них так, чтобы штрихи слились? Я только что посмотрел на класс BasicStroke AWT и вижу, что помимо указания массива тире, вы также можете указать «фазу» тире.

Вот потенциально полезный URL-адрес, показывающий, как установка фазы влияет на пунктирную обводку (внизу страницы): http://docstore.mik.ua/orelly/java-ent/jfc/ch04_05.htm

person Trevor    schedule 05.08.2011
comment
Это отличная идея, Тревор, но, к сожалению, в данном контексте она не сработает. Визуализатор диаграмм будет принимать только один объект в качестве параметра, поэтому без переопределения методов рендеринга диаграмм он не может быть реализован. - person GenericJon; 08.08.2011

Вы можете попробовать циклический LinearGradientPaint в сочетании с ваш BasicStroke.

Приложение: для визуализации острых краев используйте java.awt.TexturePaint . Чтобы визуализировать ортогональные связи, рассмотрите java.awt.geom .Путь2D.

person trashgod    schedule 05.08.2011
comment
Насколько я понимаю, LinearGradientPaint всегда рисует постепенный переход от первого цвета ко второму. Есть ли способ сделать размер градиента нулевым (чтобы изменение цвета было немедленным), но задержать цикл, чтобы штрихи были определенной длины? - person GenericJon; 08.08.2011