Java上的Graphics2D笔划峰值

Java上的Graphics2D笔划峰值,java,text,graphics,outline,stroke,Java,Text,Graphics,Outline,Stroke,我有一个问题与图形2d笔划,似乎没有人有这个问题,因为我已经搜索了类似的东西,没有结果。这是图片 正如你所看到的,我的划水有刺,我不想要这些。这是我的密码 该类扩展为JButton,方法为paintComponent Graphics2D g2d = (Graphics2D)g2.create(); TextLayout tl = new TextLayout(getText(), getFont(), g2d.getFontRenderContext()); Shap

我有一个问题与图形2d笔划,似乎没有人有这个问题,因为我已经搜索了类似的东西,没有结果。这是图片

正如你所看到的,我的划水有刺,我不想要这些。这是我的密码

该类扩展为JButton,方法为paintComponent

    Graphics2D g2d = (Graphics2D)g2.create();
    TextLayout tl = new TextLayout(getText(), getFont(), g2d.getFontRenderContext());
    Shape to = tl.getOutline(null);
    int x = (getSize().width-to.getBounds().width)/2;
    int y = (getSize().height+(to.getBounds().height-8))/2;
    System.out.println(to.getBounds().height);
    g2d.translate(x, y);
    g2d.setStroke(new BasicStroke(15.0f));
    g2d.setColor(new Color(155,155,155));
    g2d.draw(to);
    g2d.dispose();

降低冲程厚度时,尖峰也会变小。

您是否尝试过将
基本冲程
连接斜面
连接圆形
?您使用的默认连接是
join\u MITER
,这可能是导致这些丑陋(酷?)尖峰的原因。

试试这个

Stroke stroke = new BasicStroke(1,
    BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0,
    null, 0);
g2.setStroke(stroke);

就像Franz刚才说的,这是JOIN_MITER不守规矩的行为之一。斜接连接将远远超出直线的实际交点

这看起来更像是字体设计的问题,而不是图形的问题。我要检查的第一件事是使用不同的字体-我认为字体设计很糟糕。哈哈,使用故障进行设计是不好的,但是看起来很酷。尽管没有Durandal,我还是会尝试一下。几乎所有的字体都有尖刺,大多数没有尖刺,我真的不喜欢。sigh@xchan衬线字体和无衬线字体之间有显著区别吗?我稍微修改了代码,笔划保留为1。看起来很不错。