我在处理这个问题时遇到了一些困难:是否可以以某种方式向JPanel添加虚线(或点线,无所谓)边框?
我查找了SO的问题,但似乎没有人之前提过这个问题。
我想知道是否有任何可用的类。实际上,我正在使用:
myPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
显然这只是一个普通的类,提供了一些标准边框,但都不适合我使用。
我在处理这个问题时遇到了一些困难:是否可以以某种方式向JPanel添加虚线(或点线,无所谓)边框?
我查找了SO的问题,但似乎没有人之前提过这个问题。
我想知道是否有任何可用的类。实际上,我正在使用:
myPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
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);
}
}
Color
类实现了Paint
,因此不要试图解析函数签名。 - Ti Strga使用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