我通过Graphics2D绘图在JPanel上布置了Line2D和Arc2D对象。您可以在“How to make pixel perfect Line2D in - Graphics2D”这个问题上看一看。现在我要实现的是,我想为所有Line2D和Arc2D对象创建两条平行的线和弧。在视觉上,

当前绘制的法线2D和Arc2D,

想要这样装饰

到目前为止,我的想法,

我可能可以通过创建两条不同的线并从正常的线位置提供偏移+ gap和-gap来实现此目的。但是,这会产生很多我不想要的对象。

现在,可以像这样使我的法线变粗吗,

,给他们一个边框,并从中删除中间位吗?

有可能实现这一目标吗?如果是,请给我一些指导。

谢谢您的帮助。

最佳答案

使用BasicStroke并绘制两次(更粗更细)。

import java.awt.*;
import java.awt.image.*;
import java.awt.geom.*;
import javax.swing.*;

import javax.imageio.ImageIO;
import java.io.File;

class PaintThick {

    public static void main(String[] args) throws Exception {
        int size = 150;
        final BufferedImage bi = new BufferedImage(
            size,size,BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bi.createGraphics();

        double pad = 20;
        Line2D.Double line1 = new Line2D.Double(
            pad,pad,(double)(size-pad),(double)(size-pad));
        int cap = BasicStroke.CAP_BUTT;
        int join = BasicStroke.JOIN_MITER;
        BasicStroke thick = new BasicStroke(15,cap,join);
        BasicStroke thinner = new BasicStroke(13,cap,join);

        g.setColor(Color.WHITE);
        g.fillRect(0,0,size,size);

        g.setColor(Color.BLACK);
        g.setStroke(thick);
        g.draw(line1);

        g.setColor(Color.WHITE);
        g.setStroke(thinner);
        g.draw(line1);

        ImageIO.write(bi,"png",new File("img.png"));
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JOptionPane.showMessageDialog(
                    null, new JLabel(new ImageIcon(bi)));
            }
        });
    }
}

10-08 09:10