JTable,如何设置JTable的Header阴刻浮雕化显示?

shura168 2007-10-30 09:43:42
小弟,初来贵地没有积分,望个位大大指点下。十分感谢。
我想实现JTable的某列Header的浮雕话显示。测试代码如下:
JTable jTable = new JTable();
JTableHeader jheader = jTable.getTableHeader();
DefaultTableCellRenderer cellRenderer = new DefaultTableCellRenderer();
cellRenderer.setHorizontalAlignment(SwingConstants.CENTER);
cellRenderer.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED, Color.RED,Color.black));
jheader.getColumnModel().getColumn(2).setHeaderRenderer(cellRenderer);

上面的代码,header的颜色设定上去了,但是浮雕化效果没有出来,原因不明。在winxp下测试的。
...全文
141 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shura168 2007-11-07
  • 打赏
  • 举报
回复
十分感谢您的回答,谢谢!
shura168 2007-11-02
  • 打赏
  • 举报
回复
怎么没有人回答啊?哪位高人帮帮忙啊!
bradwoo8621 2007-11-02
  • 打赏
  • 举报
回复
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {

if (isSelected) {
super.setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
} else {
super
.setForeground((unselectedForeground != null) ? unselectedForeground
: table.getForeground());
super
.setBackground((unselectedBackground != null) ? unselectedBackground
: table.getBackground());
}

setFont(table.getFont());

if (hasFocus) {
Border border = null;
if (isSelected) {
border = UIManager
.getBorder("Table.focusSelectedCellHighlightBorder");
}
if (border == null) {
border = UIManager.getBorder("Table.focusCellHighlightBorder");
}
setBorder(border);

if (!isSelected && table.isCellEditable(row, column)) {
Color col;
col = UIManager.getColor("Table.focusCellForeground");
if (col != null) {
super.setForeground(col);
}
col = UIManager.getColor("Table.focusCellBackground");
if (col != null) {
super.setBackground(col);
}
}
} else {
//System.out.println("ABC");
setBorder(getNoFocusBorder());
}

setValue(value);

return this;
}
};

这是DefaultTableCellRenderer的源码, 注意我加了一句红色的. 因为TableHeaderUI调用Renderer的时候hasFocus这个参数永远是false的, 因此永远调用到蓝色的一句. 而这个getNoFocusBorder()返回的是边框为1个象素的EmptyBorder. 原因可能就在于此了.
JTableHeader的默认CellRenderer可以在JTableHeader的类里面看到, 是个内部类, 叫UIResourceTableCellRenderer, 当然private的, 没有办法继承. 不过相信看了以后你的问题也许不会再是问题了吧.

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧