在制表过程当中,总有些奇怪的需求,比如这次的要让Table的某一个特定的边框颜色指定。查找API后发现Table有个方法叫SetGridColor。但是这个方法是设置整体的框架颜色,不是我所要的,于是乎,度娘,谷哥,让我上吧!
终于,翻阅N变API手册后发现一点点蛛丝马迹:从Border下手。考虑到可以将Table中的每一个Cell做Border操作,让其绘制边框时,只绘制一边就能达到效果了,而且Border大家族里面有个类叫做LineBorder,刚好合我胃口。
paintBorder
public void paintBorder(Component c,
Graphics g,
int x,
int y,
int width,
int height)
- 按照指定的位置和尺寸为指定的组件绘制边框。
-
-
指定者:
-
接口
Border
中的paintBorder
覆盖:
-
类
AbstractBorder
中的paintBorder
-
接口
-
-
参数:
-
c
- 要为其绘制边框的组件 -
g
- 绘制的图形 -
x
- 所绘制边框的 x 坐标位置 -
y
- 所绘制边框的 y 坐标位置 -
width
- 所绘制边框的宽度 -
height
- 所绘制边框的高度
-
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Color oldColor = g.getColor();
Graphics2D g2 = (Graphics2D)g;
int i;
g2.setRenderingHints(rh);
g2.setColor(lineColor);
for(i = 0; i < thickness; i++) {
if(!roundedCorners)
g2.drawRect(x+i, y+i, 1-i-i-1, height-i-i-1); // 主要是这里第三个参数,原本是:width-i-i-1,被我修改成1
else
g2.drawRoundRect(x+i, y+i, 1-i-i-1, height-i-i-1, 5, 5);
}
g2.setColor(oldColor);
}
上面这个方法重写的不是我本人写的,也是百度的,这些代码看起来特累 - -、 能省点力气是点力气吧。这样重写了之后尝试在CellRenderer里面加上一句
MyLineBorder myLineBorder = new MyLineBorder(Color.red, 1, true);
if((column == 8) || (column == 19) || (column == 30) || (column == 41)) {
setBorder(myLineBorder);
}
果然成功了。
不过后面我想用一个按钮来定制这个边框线的颜色的。但是尝试了很多遍,都不行。头疼,先就这样吧。