如何创建在两种颜色之间交替的虚线?

问题描述 投票:0回答:4

我正在使用 JFreeChart,并且想要使用一条在灰色和黑色虚线之间交替且之间没有空格的线来绘制一系列数据。即grayblackgrayblackgrayblack

JFreeChart 只接受 AWT Stroke 或 Shape 对象作为渲染系列的方法。

据我了解,BasicStroke 只能有一种颜色,并且可以在不透明和透明之间交替。是否有另一个类实现了允许多种颜色的 Stroke ?或者有其他方法可以解决这个问题吗?

java awt jfreechart
4个回答
2
投票

我在使用 JFreeChart 时也遇到过类似的问题。我最终只是扩展了适当的绘图并覆盖了一些绘制方法。这不是一个理想的解决方案,但您可以使用 JFreeChart 做的事情有一个限制。


2
投票

我将冒着被击落的风险,因为我是一名 Android 程序员,没有 AWT 或 JFreeChart 的具体经验,但我会尝试一下。

您能否通过叠加两条虚线并偏移其中一条虚线的虚线相位以使虚线啮合在一起来创建在两种颜色之间交替的虚线?我刚刚查看了 AWT 的

BasicStroke
类,我发现除了指定破折号数组之外,您还可以指定破折号“相位”。

这是一个可能有用的 URL,显示设置相位如何影响虚线笔画(靠近页面底部):http://docstore.mik.ua/orelly/java-ent/jfc/ch04_05.htm


1
投票

您可以尝试将循环

LinearGradientPaint
与您的
BasicStroke
结合使用。

附录:要渲染锐边,请考虑java.awt.TexturePaint。要渲染正交键,请考虑 java.awt.geom.Path2D


0
投票

我找到了一种方法来做到这一点,而无需覆盖任何

paint()
paintComponent()
方法。本质上,您要做的就是使用
drawRect()
制作两个矩形,使用两种不同类型的笔画,一种笔画的相位属性略高于另一种,以及两种不同的颜色。在这里:


g.setColor(Color.black);
g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{5, 5}, 0));
g.drawRect(0, 0, 100, 100);
        
g.setColor(Color.white);
g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{5, 5}, 5));
g.drawRect(0, 0, 100, 100);

BasicStroke
构造函数的最后一个变量是阶段,这就是您要寻找的。

© www.soinside.com 2019 - 2024. All rights reserved.