我想设置自定义DefaultTreeCellRenderer。
所以我建了这个班:
class CustomTreeTableSpeseXCategoriaSpese extends DefaultTreeCellRenderer {
/**
*
*/
private static final long serialVersionUID = 4842418316518803090L;
private Font fontTotale = new Font("Verdana", Font.BOLD, 12);
private Font fontNegativo = new Font("Verdana", Font.BOLD, 12);
private int numeroRighe;
CustomTreeTableSpeseXCategoriaSpese(int numeroRighe){
this.numeroRighe=numeroRighe;
}
public Component getTreeCellRendererComponent(
JTree tree,
Object value,
boolean selected,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
// Allow the original renderer to set up the label
Component rendererComponent = super.getTreeCellRendererComponent(
tree, value, selected,
expanded, leaf, row,
hasFocus);
rendererComponent.setBackground( Color.WHITE );
if (row== this.numeroRighe-1) {
rendererComponent.setForeground(Color.BLACK);
rendererComponent.setBackground( Color.RED );
rendererComponent.setFont(fontTotale);
}else if(row != this.numeroRighe/* && column !=3*/){
rendererComponent.setForeground( Color.BLACK );
rendererComponent.setBackground(new Color(200, 200, 200));
}else if(row != this.numeroRighe-1 /*&& column ==3*/){
}
return rendererComponent;
}
}
使用此代码,我无法看到我的背景颜色,即前景色。 另一个问题是,为不同的列设置不同的渲染器是可能的吗?我希望前3列有背景和前景色,而另一列有不同的渲染器。
修改
使用该代码,我可以看到这样的JXTreeTable:
但我希望像这样展示TreeTable:
修改
public class CustomTreeTableSpeseXCategoriaSpese extends JLabel implements TreeCellRenderer, TableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 4842418316518803090L;
private Font fontTotale = new Font("Verdana", Font.BOLD, 12);
private Font fontNegativo = new Font("Verdana", Font.BOLD, 12);
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setOpaque(true);
setBackground(isSelected ? new Color(83,142,213) : Color.white);
setForeground(isSelected ? Color.white : Color.black);
setText(value != null ? value.toString() : "<null>");
return this;
}
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
//rendererComponent.setBackground( Color.WHITE );
if (row== tree.getRowCount()) {
setForeground(Color.BLACK);
setOpaque(true);
setBackground( Color.RED );
setFont(fontTotale);
}else if(row != tree.getRowCount()/* && column !=3*/){
setForeground( Color.BLACK );
setOpaque(true);
setBackground(new Color(200, 200, 200));
}else if(row != tree.getRowCount()-1 /*&& column ==3*/){
//verifico il valore se negativo rosso
//se positivo blu
/*String valore = super.getValueAt(row, column).toString();
if(valore.startsWith("-")){
rendererComponent.setForeground(Color.red);
rendererComponent.setFont(fontNegativo);
}else{
rendererComponent.setForeground(Color.blue);
rendererComponent.setFont(fontNegativo);
}*/
}
setText(value != null ? value.toString() : "<null>");
return this;
}
}
答案 0 :(得分:1)
使用此代码,我看不到背景颜色,即前景色。
很难分辨,因为你没有展示如何将渲染器设置到树状表中,这导致了你的第二个问题。
另一个问题是,可以为其设置不同的渲染器 不同栏目?我希望前3列有背景和 前景色,其他列有不同的渲染器。
JXTreeTable
由树和表两部分组成,因此您必须同时设置TreeCellRenderer
和TableCellRenderer
以进行自定义渲染。像这样:
treeTable.setDefaultRenderer(Object.class, new CustomTableCellRenderer());
treeTable.setTreeCellRenderer(new CustomTreeCellRenderer());
您可以创建一个实现两个接口的类,如this Q/A
所示