我在这件事上遇到了问题:我可以以某种方式向 JPanel 添加虚线(或虚线,无论如何)边框吗?
我搜索了一些问题,但似乎以前没有人问过这个问题。
我想知道是否有任何课程可以使用。实际上我正在使用:
myPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
显然这是一个标准类,只给出很少的标准边框,对我没有用处。
我在这件事上遇到了问题:我可以以某种方式向 JPanel 添加虚线(或虚线,无论如何)边框吗?
我搜索了一些问题,但似乎以前没有人问过这个问题。
我想知道是否有任何课程可以使用。实际上我正在使用:
myPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
显然这是一个标准类,只给出很少的标准边框,对我没有用处。
从 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,我遇到了从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