Java 如何在JXTreeTable上设置自定义DefaultTreeCellRenderer
我想设置我的自定义DefaultTreeCellRenderer 所以我建立了这个类:Java 如何在JXTreeTable上设置自定义DefaultTreeCellRenderer,java,swing,swingx,jtreetable,treecellrenderer,Java,Swing,Swingx,Jtreetable,Treecellrenderer,我想设置我的自定义DefaultTreeCellRenderer 所以我建立了这个类: class CustomTreeTableSpeseXCategoriaSpese extends DefaultTreeCellRenderer { /** * */ private static final long serialVersionUID = 4842418316518803090L; private Font fontTotale = new F
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列有背景色和前景色,另一列有不同的渲染器
编辑
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;
}
}
有了这些代码,我可以看到如下JXTreeTable:
treeTable.setDefaultRenderer(Object.class, new CustomTableCellRenderer());
treeTable.setTreeCellRenderer(new CustomTreeCellRenderer());
但我想把树表展示成这样:
treeTable.setDefaultRenderer(Object.class, new CustomTableCellRenderer());
treeTable.setTreeCellRenderer(new CustomTreeCellRenderer());
编辑
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;
}
}
public类customTreeTableSpesexCategory扩展JLabel实现TreeCellRenderer、TableCellRenderer{
/**
*
*/
私有静态最终长serialVersionUID=4842418316518803090L;
私有字体fontTotale=新字体(“Verdana”,Font.BOLD,12);
私有字体FontNegative=新字体(“Verdana”,Font.BOLD,12);
@凌驾
公共组件GetTableCellRenderComponent(JTable表、对象值、布尔isSelected、布尔hasFocus、int行、int列){
set不透明(true);
挫折背景(isSelected?新颜色(83142213):颜色。白色);
设置前景(选择?颜色。白色:颜色。黑色);
setText(value!=null?value.toString():“”);
归还这个;
}
公共组件GetTreeCellRenderComponent(JTree树、对象值、布尔选定、布尔展开、布尔叶、int行、布尔hasFocus){
//RenderComponent.setBackground(颜色:白色);
if(row==tree.getRowCount()){
设置前景(颜色为黑色);
set不透明(true);
挫折地面(颜色:红色);
setFont(fontTotale);
}else if(row!=tree.getRowCount()/*&&column!=3*/){
设置前景(颜色为黑色);
set不透明(true);
挫折背景(新颜色(200200200));
}else if(row!=tree.getRowCount()-1/*&&column==3*/){
//瓦洛雷红牛队
//硒正蓝光
/*字符串valore=super.getValueAt(行、列).toString();
if(从价开始,以“-”号填列){
RenderComponent.setForeground(颜色:红色);
RenderComponent.setFont(FontNegative);
}否则{
renderComponent.setForeground(Color.blue);
RenderComponent.setFont(FontNegative);
}*/
}
setText(value!=null?value.toString():“”);
归还这个;
}
}
用这段代码我看不到我的背景色,我的前景色
很难说,因为您没有展示如何将渲染器设置到树表,这就引出了第二个问题
另一个问题是,可以为设置不同的渲染器
不同的专栏?我希望前3列有背景和
前景色,对于其他列,使用不同的渲染器
JXTreeTable
由树和表两部分组成,因此您必须同时设置TreeCellRenderer
和TableCellRenderer
进行自定义渲染。大概是这样的:
treeTable.setDefaultRenderer(Object.class, new CustomTableCellRenderer());
treeTable.setTreeCellRenderer(new CustomTreeCellRenderer());
您可以创建一个实现两个接口的类,如所示。我已经看到了那篇文章,但是我看不到更改。我刚刚编辑了我的第一个问题,我怀疑你跳过了主要部分:将渲染器设置到树表。您仍然没有在代码中显示该部分,只显示渲染器类@bircastriNow我可以为TreeTable的表部分设置渲染器,这样就可以了。但是现在我无法设置第一列的渲染。第一列是树的一部分。按如下方式设置树单元渲染器:
treeTable.setTreeCellRenderer(新的CustomTreetablesPesexCategorizape())
。应该可以。否则,请在问题中添加一个@bircastriYes,我已经插入了这段代码,但我无法在第一列设置正确的背景色。现在我可以在列2、3、4等处设置正确的渲染器,但不能在列1处设置渲染器