Java为JPanel添加虚线或点线边框

6

我在处理这个问题时遇到了一些困难:是否可以以某种方式向JPanel添加虚线(或点线,无所谓)边框?

我查找了SO的问题,但似乎没有人之前提过这个问题。

我想知道是否有任何可用的类。实际上,我正在使用:

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

显然这只是一个普通的类,提供了一些标准边框,但都不适合我使用。

请查看MatteBorder如何使用边框以获取示例。 - MadProgrammer
http://docs.oracle.com/javase/tutorial/uiswing/components/border.html#custom - Matt Ball
3个回答

12
从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中遇到了困难,必须定义Insets。请参见我的下面的帖子。 - Olmstov

5

2
这是一个很好的答案,但请注意提到的方法自Java 1.7以来就在JDK中了。 - Timmos
2
此外,标准的Color类实现了Paint,因此不要试图解析函数签名。 - Ti Strga

0

使用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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接