小弟,初来贵地没有积分,望个位大大指点下。十分感谢。
我想实现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下测试的。
我想实现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下测试的。
解决方案 »
- 【请教】ObjectOutputStream操作对象时,在读取对象的属性为什么会丢失。
- 麻烦大家看看该程序是否会造成死锁
- 如何将一串String类型的IP地址,转化成4字节数据
- ant如何copy几个文件到 .jar文件中,而不覆盖jar包中其他的文件
- 字段类型求助
- jdbc连接数据库显示找不到类异常0-0
- 关于JTree右键弹出菜单的位置不与鼠标的位置一致的问题
- 关于SUBSTRING 问题
- 请教一个Java初学者的问题!
- 关于Explicit Event Enabling的问题?
- 一个关于FlowLayout的问题
- 请教关于Class.forName(str).newInstance()的问题:
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的, 没有办法继承. 不过相信看了以后你的问题也许不会再是问题了吧.