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

oli*_*ren 4 swing transparency overlay jfreechart java-2d

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

理想的结果

它是一种非常基本的单色条形图,但有一个“奇特”的细节:对角线条纹。我以为可以通过在普通条顶部叠加另一张图片来实现这一点。该图片将具有与条相同的尺寸,并具有对角白色条纹和透明背景。我不太确定如何执行此操作,因为我几乎没有GUI经验,但是我发现了一篇非常有用的文章,涉及将图像叠加在JFreeChart的图形上,因此,我很确定自己应该能够做到这一点。的。

但是我应该如何创建斜条纹?我知道如何分配从左下角到右上角的线,而不是在左上角和右下角的上限线。我可以以某种方式在矩形的外部绘制(并且不包含在图片中)吗?

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

oli*_*ren 5

使用渐变填充绘制线条

在垃圾桶的尖端,我尝试用渐变填充形状,该渐变具有尖锐的边缘以模拟线条画。这将阻止大量计算,并且可能会变得简单得多。对于较粗的线条,效果很好,但对于较细的线条则效果不佳。使用以下代码在第一张图片中产生填充:

    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)
    );
Run Code Online (Sandbox Code Playgroud)

尝试使用渐变填充绘制细线

使用图形基元绘制线

尽管更简单,但它对我而言却行不通。对于我来说,更复杂但更自然的方法是在形状(矩形,圆弧等)的顶部绘制线条。以下代码用于生成第二张图像。注意使用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();
    }
Run Code Online (Sandbox Code Playgroud)

只需使用clip(Shape s)在另一个形状的顶部绘制线条以限制溢出