Alinhar Texto a Esquerda e Valor a Direita num JTREE

Pessoal,

Estou fazendo um JTree com um plano de contas,

Fiz tudo certinho, criei meu model e criei meu renderer personalizado.

Nao estou conseguindo fazer o valor ficar alinhado à direita. (Veja o arquivo anexado)

Meu renderer atualmente é um JPanel com 3 JLabel:

lblIcone
lblNome
lblSaldo

No jpanel esta tudo certo, se eu mudo o tamanho dele, os dois primeiros ficam presos na margem esquerda e o lblSaldo fica preso na margem direita, porem, ao juntar tudo na jtree ta saindo os valores colado no nome da conta.

Ate aqui tudo bem, sei que isto esta ocorrendo pois o jpanel esta com o tamanho dinamico, porem eu gostaria, neste caso, que ele ficasse com a largura do jtree, alguem pode me ajudar?

Aqui o codigo do renderer, o FinanceiroContaRenderer extends um JPanel e nele tem os 3 labels.

public class FinanceiroContaTreeCellRenderer extends DefaultTreeCellRenderer {

    private FinanceiroContaRenderer financeiroContaRenderer = new FinanceiroContaRenderer();

    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);

        if (sel) {
            financeiroContaRenderer.setForeground(super.getTextSelectionColor());
            financeiroContaRenderer.setBackground(super.getBackgroundSelectionColor());
        } else {
            financeiroContaRenderer.setForeground(super.getTextNonSelectionColor());
            financeiroContaRenderer.setBackground(super.getBackgroundNonSelectionColor());
        }

        if (value instanceof FinanceiroConta) {
            financeiroContaRenderer.setConta((FinanceiroConta) value);
        }

        return financeiroContaRenderer;

    }
}


Consegui resolver assim:

Peguei uma classe na internet que o cara ensinava alinha a direita e fiz algumas modificacoes, ficou assim:

import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Rectangle;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.plaf.basic.BasicTreeUI;
import javax.swing.tree.AbstractLayoutCache;
import javax.swing.tree.TreePath;

public class CustomTreeUI extends BasicTreeUI {

    private JScrollPane fScrollPane;

    public CustomTreeUI(JScrollPane scroll) {
        super();
        this.fScrollPane = scroll;
    }

    @Override
    protected AbstractLayoutCache.NodeDimensions createNodeDimensions() {
        return new NodeDimensionsHandler() {

            @Override
            public Rectangle getNodeDimensions(Object value, int row, int depth, boolean expanded, Rectangle size) {

                Rectangle dimensions = super.getNodeDimensions(value, row, depth, expanded, size);
                dimensions.width = fScrollPane.getViewport().getWidth() - getRowX(row, depth+1);
                return dimensions;
                
            }
        };
    }

    @Override
    protected void paintHorizontalLine(Graphics g, JComponent c, int y, int left, int right) {
    }

    @Override
    protected void paintVerticalPartOfLeg(Graphics g, Rectangle clipBounds, Insets insets,
            TreePath path) {
    }
}

Pra usar, faco assim:

treePlanoContas.setUI(new CustomTreeUI(scrollTree));

RESULTADO FINAL:


Tudo bom kemperacc.

Estava olhando a primeira imagem onde tem um item selecionado.

Como você fez para, ao selecionar um nó, toda a linha seja preenchida, não somente ao redor do label do texto ?

Value.

Seguinte,

Não consegui resolver isso não…!!!

Naquela primeira imagem ainda estava utilizando a renderização padrão do java, depois que fiz as alterações postadas acima, a linha passou a iniciar deslocada.

[]s

Kemper

PS: Se conseguir resolver isso, posta aqui a solução. To muito agarrado de tempo pra mecher nisso!

t+

Kempera, o jeito de resolver isso é usar um TreeTable, não um JTree cozinhado como você fez. É mais bonito, se pensar bem.

ou

então

http://java.sun.com/products/jfc/tsc/articles/treetable1/

cujo fonte está em

http://java.sun.com/products/jfc/tsc/articles/treetable1/downloads/sources.zip