如何在Java应用程序中设置GetTreeCellRenderComponent
大家好,我有一个带有自定义DefaultTreeTableModel的JXtreeTable 现在我想要这个:如何在Java应用程序中设置GetTreeCellRenderComponent,java,swing,jxtreetable,Java,Swing,Jxtreetable,大家好,我有一个带有自定义DefaultTreeTableModel的JXtreeTable 现在我想要这个: 将默认图标更改为打开文件夹图标(当节点打开时),关闭文件夹图标(当节点关闭时) 我想在子节点打开时更改其所有行渲染器 所以我有这个代码: public class CustomTreeTableSpeseXCategoriaSpese extends JLabel implements TreeCellRenderer, TableCellRenderer { /**
public class CustomTreeTableSpeseXCategoriaSpese extends JLabel implements TreeCellRenderer, TableCellRenderer {
/**
*
*/
//DefaultTreeCellRenderer defaultRenderer = new 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 Font fontProva = new Font("Verdana", Font.BOLD, 20);
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
setOpaque(true);
if(column ==1){
setHorizontalAlignment(SwingConstants.LEFT);
}else{
setHorizontalAlignment(SwingConstants.RIGHT);
}
if (row== table.getRowCount()-1) {
setForeground(Color.BLACK);
setFont(fontTotale);
setBackground( Color.RED );
}else if(row != table.getRowCount() && column !=4){
setForeground( Color.BLACK );
setBackground(new Color(200, 200, 200));
setFont(UtilitySwing.getTableFont());
}else if(row != table.getRowCount()-1 && column ==4){
//verifico il valore se negativo rosso
//se positivo blu
String valore = value.toString();
if(valore.startsWith("-")){
setForeground(Color.red);
setFont(fontNegativo);
}else{
setForeground(Color.blue);
setFont(fontNegativo);
}
}
setText(value != null ? value.toString() : "<null>");
return this;
}
SEE EDIT COMMENT
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {}
}
public类customTreeTableSpesexCategory扩展JLabel实现TreeCellRenderer、TableCellRenderer{
/**
*
*/
//DefaultTreeCellRenderer defaultRenderer=新的DefaultTreeCellRenderer();
私有静态最终长serialVersionUID=4842418316518803090L;
私有字体fontTotale=新字体(“Verdana”,Font.BOLD,12);
私有字体FontNegative=新字体(“Verdana”,Font.BOLD,12);
//私有字体fontProva=新字体(“Verdana”,Font.BOLD,20);
@凌驾
公共组件GetTableCellRenderComponent(JTable表、对象值、,
布尔值(已选择,布尔值为焦点,整数行,整数列){
set不透明(true);
如果(列==1){
设置水平对齐(SwingConstants.左);
}否则{
设置水平对齐(SwingConstants.右侧);
}
if(row==table.getRowCount()-1){
设置前景(颜色为黑色);
setFont(fontTotale);
挫折地面(颜色:红色);
}else if(行!=table.getRowCount()&&column!=4){
设置前景(颜色为黑色);
挫折背景(新颜色(200200200));
setFont(UtilitySwing.getTableFont());
}else if(行!=table.getRowCount()-1&&column==4){
//瓦洛雷红牛队
//硒正蓝光
字符串valore=value.toString();
if(从价开始,以“-”号填列){
设置前景(颜色为红色);
setFont(FontNegative);
}否则{
设置前景(颜色:蓝色);
setFont(FontNegative);
}
}
setText(value!=null?value.toString():“”);
归还这个;
}
请参见编辑注释
公共组件GetTreeCellRenderComponent(JTree树,对象值,
布尔选定、布尔展开、布尔叶、整型行、,
布尔hasFocus){}
}
使用此代码,我没有正确的布局。如果我尝试运行我的应用程序,我会看到这一点
我不明白为什么我在图标上也看到像com.mcsolution.beans这样的对象字符串。Entrata@11111
编辑我使用以下命令更改GetTreeCellenderComponent方法:
公共组件GetTreeCellRenderComponent(JTree树,对象值,
布尔选定、布尔展开、布尔叶、整型行、,
布尔值(焦点){
set不透明(true);
RandomTextTreeTableModel=(RandomTextTreeTableModel)tree.getModel();
if(model.getPathToRoot((TreeTableNode)值).length>2){
//你在这儿干什么
//设置前景(颜色为黑色);
挫折地面(颜色:白色);
}
如果(扩展){
ImageIcon renderIcon=新的ImageIcon(getClass().getResource(“/resources/folder_open.png”);
设置图标(渲染器图标);
//挫折背景(颜色:绿色);
//setFont(fontProva);
}否则{
ImageIcon renderIcon=新的ImageIcon(getClass().getResource(“/resources/folder_close.png”);
设置图标(渲染器图标);
}
//瑟诺哈菲格利酒店
如果(叶){
设置图标(空);
}
setText(value!=null?value.toString():“”);
归还这个;
}
现在我可以看到正确的图标,但我继续看到write com.mcsolution。。。。。而且我不能用子节点设置另一种字体。请尝试以下示例和。好的,通过您的示例,我可以设置正确的关闭或打开图像,但对于另一个,我的问题是什么?什么不起作用?请编辑您的问题,使其包含一个集中在单个问题上并显示您当前方法的“com.mcsolution.beans”。Entrata@11111“看起来像默认的
toString
实现:“[class name]@[hash code]”。如果您在问题中添加更多代码,使其成为一个完整的示例,我们可能会进一步帮助您。目前,人们不得不猜测树表是如何构造的,这使得很难确定问题是什么以及如何解决它。
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
setOpaque(true);
RandomTextTreeTableModel model = (RandomTextTreeTableModel) tree.getModel();
if (model.getPathToRoot((TreeTableNode) value).length > 2) {
//Do your rendering goodness here
//setForeground( Color.BLACK );
setBackground(Color.white);
}
if (expanded) {
ImageIcon rendererIcon = new ImageIcon(getClass().getResource("/resources/folder_open.png"));
setIcon(rendererIcon);
//setBackground(Color.green);
//setFont(fontProva);
}else{
ImageIcon rendererIcon = new ImageIcon(getClass().getResource("/resources/folder_close.png"));
setIcon(rendererIcon);
}
//se non ha figli
if(leaf){
setIcon(null);
}
setText(value != null ? value.toString() : "<null>");
return this;
}