【问题标题】:Java add a Dashed or dotted border to a JPanelJava 向 JPanel 添加虚线或虚线边框
【发布时间】:2012-10-05 00:46:39
【问题描述】:

我遇到了这个问题:我可以通过某种方式为 JPanel 添加虚线(或虚线,无论如何)边框吗?

我搜索了一些问题,但似乎以前没有人问过这个问题。

我想知道是否有任何课程可以使用。实际上我正在使用:

myPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));

显然这是一个标准类,只提供很少的标准边框,没有一个对我有用。

【问题讨论】:

标签: java jpanel border dotted-line


【解决方案1】:

从 Java 7 开始,您可以使用BorderFactory.createDashedBorder(Paint)

在 Java 7 之前,您必须自己定义此边框。然后就可以用这个自写的边框了:

private class DashedBorder extends AbstractBorder {
    @Override
    public void paintBorder(Component comp, Graphics g, int x, int y, int w, int h) {
        Graphics2D gg = (Graphics2D) g;
        gg.setColor(Color.GRAY);
        gg.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{1}, 0));
        gg.drawRect(x, y, w - 1, h - 1);
    }
}

【讨论】:

  • 很难让它在 Java 6 中工作。还必须定义插入。请看我下面的帖子
【解决方案2】:

【讨论】:

  • 这是一个很好的答案,但请说明所提到的方法自 Java 1.7 起就在 JDK 中。
  • 另外,标准的Color 类实现了Paint,所以不要疯狂地尝试解析函数签名。
【解决方案3】:

使用 Java 6,我在从 Timmos 解决方案(上图)获取自定义 AbstractBorder 时遇到问题。绘图会显示奇怪的伪影,例如只有几个像素会零星地绘制。插入需要定义,可以通过添加以下方法来完成:

public Insets getBorderInsets(Component c)
{
    return new Insets(thickness, thickness, thickness, thickness);
}

public Insets getBorderInsets(Component c, Insets insets)
    insets.left = insets.right = insets.top = insets.bottom = thickness;
    return insets;
}

边框的厚度是您想要的。例如1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多