gpt4 book ai didi

swing - 如何在矩形上创建和分布对角条纹?

转载 作者:行者123 更新时间:2023-12-04 23:29:48 31 4
gpt4 key购买 nike

我希望能够使用 JFreeChart 创建类似于下图的条形图。

the desired result

这是一个非常基本的单色条形图,但有一个“花哨”的细节:斜条纹。我在想这可以通过在普通栏的顶部叠加另一张图片来实现。该图片将与条形具有相同的尺寸,具有对角白色条纹和透明背景。我不太确定如何做到这一点,因为我的 GUI 经验很少,但我发现了 very useful article处理在 JFreeChart 的图形上叠加图像,所以我很确定我应该能够提取它。

但是我应该如何创建斜条纹?
我看到了如何将线从左下角分布到右上角,而不是左上角和右下角的加盖线。我可以以某种方式在矩形外绘画(而不将其包含在图片中)吗?

编辑 :经过一些搜索,我看不出我的建议是用透明背景覆盖图像是否可行,因为我找不到任何关于如何执行此操作的示例。另一方面,仅在矩形上绘制线条可能更容易。

最佳答案

使用渐变填充绘制线条

在trashgod 的提示中,我尝试用具有锐利边缘的渐变填充形状来模拟线条绘制。这将阻止大量计算,并且可能会更简单。它适用于粗线,但不适用于细线。使用以下代码生成第一张图片的填充:

    rect.setSpace(spaceBetweenLines);
Color bg = Color.YELLOW;
Color fg = Color.BLUE;
rect.setPaint(new LinearGradientPaint(
(float) startX, (float) startY, (float) (startX + spaceBetweenLines), (float) (startY + spaceBetweenLines),
new float[] {0,.1f,.1001f}, new Color[] {fg,fg,bg}, MultipleGradientPaint.CycleMethod.REPEAT)
);

Trying to paint thin lines using a gradient fill

使用图形基元绘制线条

虽然更简单,但在我的情况下不起作用。更精细,但对我来说,更自然的方法是在形状(矩形,圆形,...)的顶部绘制线条。以下代码用于生成第二个图像。观察使用 clip(Shape s)将线条绘制限制为下方的形状。不是简单地画一个矩形并使用 clip()的原因限制形状的是 clip()操作没有别名,从而产生锯齿。因此我必须先绘制形状以获得平滑的边缘,然后在即将进行的线条绘制中设置剪辑以防止溢出,最后绘制线条。
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

g2.setPaint(getBackground());
g2.fill(getShape());
g2.setClip(getShape());

// draw diagonal lines
g2.setPaint(getLineColor());

for (int x = (int) this.x, y = (int) (this.y); y - height < (this.y + height + getSpace()); ) {
g2.drawLine(x, y , x + (int) width , y - (int) width);

y += getSpace();
}

Just painting lines on top of another shape using clip(Shape s) to limit overflow

关于swing - 如何在矩形上创建和分布对角条纹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6935748/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com