0

大家好,我有一个带有自定义 DefaultTreeTableModel 的 JXtreeTable。

现在我想要这个:

  1. 使用打开文件夹图标(节点打开时)更改默认图标,关闭文件夹图标(节点关闭时)
  2. 我想在打开时更改子节点的所有行渲染器。

所以我有这个代码:

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) {}
        
    } 

使用此代码,我没有正确的布局。如果我尝试运行我的应用程序,我会看到这个 在此处输入图像描述

我不明白为什么我在图标上还看到了像 com.mcsolution.beans.Entrata@11111 这样的 Object 字符串

编辑我用这个改变方法getTreeCellendereComponent:

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;
    }

现在我可以看到正确的图标,但我继续看到写入 com.mcsolution .....并且我无法使用子节点设置另一种字体。

4

0 回答 0