TreeView com JCheckBox Habilitado

1 resposta
juceliohv

Boa tarde Irmãos, :D

Construí uma TreeView constituída de várias JCheckBox. Consegui popular, renderizar, colocar os nomes.

Mas ainda tenho três problemas

[list]Não consigo mudar o check para marcado ou desmarcado na tela.[/list]
[list]Todo registro selecionado fica com o Text abreviado por reticências mesmo com tamanho suficiente para ser mostrado.[/list]
[list]O Text da Raiz sai como nome do primeiro item aberto.[/list]

Segue abaixo o código e anexo está o print.

CheckNodeRenderer
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gui.util.renderers;

import gui.util.treeModel.Bloco;
import gui.util.treeModel.Registro;
import gui.util.treeModel.Validacao;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.Icon;
import javax.swing.JCheckBox;
import javax.swing.JTree;
import javax.swing.tree.TreeCellRenderer;

/**
 *
 * @author Jucélio Horácio Vieira
 */
public class CheckNodeRenderer extends JCheckBox implements TreeCellRenderer{

    public CheckNodeRenderer(String string, Icon icon, boolean bln) {
        super(string, icon, bln);
    }

    public CheckNodeRenderer() {
    }
    
        
    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value, 
                                                    boolean selected, boolean expanded, 
                                                    boolean leaf, int row, boolean hasFocus) {        
        
        
        if(value instanceof Bloco){
            setName(((Bloco) value).getBloco());
            setText(((Bloco) value).getBloco());
        }
        if(value instanceof Registro){
            setName(((Registro) value).getRegistro());
            setText(((Registro) value).getRegistro());
        }
        if(value instanceof Validacao){
            setName(((Validacao)value).getValidacao());
            setText(((Validacao)value).getValidacao());
        }
               
        if(value instanceof String){
            System.out.println("nome " + value);
        }
        
        
        if(selected){
            setForeground(Color.WHITE);
            setFont(tree.getFont().deriveFont(Font.BOLD));                        
        }else{
            setForeground(tree.getForeground());
            setFont(tree.getFont());            
        }
        
        return this;
        
    }
    
    
    
}
ValidacaoTreeModel
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gui.util.treeModel;

import java.util.ArrayList;
import java.util.List;

import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;

/**
 *
 * @author Jucélio Horácio Vieira
 */
public class ValidacaoTreeModel implements TreeModel{
    //Criamos um objeto para nossa raiz. O List não pode ser usado diretamente pois  
    //seu hash irá mudar sempre que um novo livro for adicionado.  
    //Fora que é mais bonitinho escrever "Livros" no topo.  
    private String root = "Blocos";
    
    // Escrevam depois AbstractTreeModel para lidar com os listeners.  
    private List<TreeModelListener> listeners = new ArrayList<TreeModelListener>();

    // Raiz da nossa árvore, vamos exibir uma lista de livros.  
    private List<Bloco> blocos;
    
    /** Inicia o modelo de objetos com toda a estrutura já formada através de Listas.
     * @param blocos - Lista do objeto gui.treeModel.Bloco;
     */
    public ValidacaoTreeModel(List<Bloco> blocos){
        this.blocos = blocos;
    }    
    
    /* (non-Javadoc)
     * @see javax.swing.tree.TreeModel#addTreeModelListener(javax.swing.event.TreeModelListener)
     */
    @Override
    public void addTreeModelListener(TreeModelListener l) {
        listeners.add(l);
    }    

    /* (non-Javadoc)
     * @see javax.swing.tree.TreeModel#getChild(java.lang.Object, int)
     */
    @Override
    public Object getChild(Object parent, int index) {
        if(parent == root){
            return blocos.get(index);
        }
        
        if(parent instanceof Bloco){
        	return ((Bloco) parent).getRegistros().get(index);
        }
        
        if(parent instanceof Registro){
        	return ((Registro) parent).getValidacoes().get(index);
        }
        
        if(parent instanceof Validacao){
            return null;
        }
        
        return null;
        
        // 	Se o pai não é nenhum desses. Melhor dar erro.  
//        throw new IllegalArgumentException("Invalid parent class"  
//                + parent.getClass().getSimpleName());  
    }

    @Override
    public int getChildCount(Object parent) {
        if(parent == root){
            return blocos.size();
        }
        
    	if(parent instanceof Bloco){
        	return ((Bloco) parent).getRegistros().size();
        }
        
        if(parent instanceof Registro){
        	return ((Registro) parent).getValidacoes().size();
        }
        
        return 0;
        
//        // 	Se o pai não é nenhum desses. Melhor dar erro.  
//        throw new IllegalArgumentException("Invalid parent class"  
//                + parent.getClass().getSimpleName());  
    }

    @Override
    public int getIndexOfChild(Object parent, Object child) {
        if(parent == root){
            return blocos.indexOf(child);
        }
        
    	if(parent instanceof Bloco){
        	return ((Bloco) parent).getRegistros().indexOf(child);
        }
        
        if(parent instanceof Registro){
        	return ((Registro) parent).getValidacoes().indexOf(child);
        }
        
        return 0;
    }

    @Override
    public Object getRoot() {
        return root;
    }

    @Override
    public boolean isLeaf(Object node) {
        if(node instanceof Validacao){
        	return true;
        }
        return false;
    }

    @Override
    public void removeTreeModelListener(TreeModelListener l) {
    	listeners.remove(l);
        
    }

    @Override
    public void valueForPathChanged(TreePath path, Object newValue) {
        System.out.println("Path" + path + "\n new Valeu " + newValue + "\n\n");
    }        
}
Carregado e instancia modelo antes de ser vinculado a TreeView
//Modelo da TreeView do seletor de validações
        List<Bloco> blocos = new ArrayList<Bloco>();
        List<Registro> registros = new ArrayList<Registro>();
        List<Validacao> validacoes = new ArrayList<Validacao>();
        
        Bloco b0 = new Bloco("0");
        Bloco bC = new Bloco("C");
        Bloco bH = new Bloco("H");
        
        Registro reg0000 = new Registro("0", "0000");
        Registro reg0001 = new Registro("0", "0001");
        Registro regC001 = new Registro("C", "C001");
        Registro regC100 = new Registro("C", "C100");
        Registro regH001 = new Registro("H", "H001");
        Registro regH010 = new Registro("H", "H010");
        
        Validacao valid1 = new Validacao("0", "0000", "EFD-0000-001");
        Validacao valid2 = new Validacao("0", "0000", "EFD-0000-002");
        
        Validacao valid3 = new Validacao("0", "0001", "EFD-0001-001");
        Validacao valid4 = new Validacao("0", "0001", "EFD-0001-002");
        
        Validacao valid5 = new Validacao("C", "C001", "EFD-C001-001");
        Validacao valid6 = new Validacao("C", "C001", "EFD-C001-002");
        
        Validacao valid7 = new Validacao("C", "C100", "EFD-C100-001");
        Validacao valid8 = new Validacao("C", "C100", "EFD-C100-002");
        
        Validacao valid9 = new Validacao("H", "H001", "EFD-H001-001");
        Validacao valid0 = new Validacao("H", "H001", "EFD-H001-002");
        
        Validacao valid11 = new Validacao("H", "H010", "EFD-H010-001");
        Validacao valid12 = new Validacao("H", "H010", "EFD-H010-002");
        
        reg0000.getValidacoes().add(valid1);
        reg0000.getValidacoes().add(valid2);
        reg0001.getValidacoes().add(valid3);
        reg0001.getValidacoes().add(valid4);
        regC001.getValidacoes().add(valid5);
        regC001.getValidacoes().add(valid6);
        regC100.getValidacoes().add(valid7);
        regC100.getValidacoes().add(valid8);
        regH001.getValidacoes().add(valid9);
        regH001.getValidacoes().add(valid0);
        regH010.getValidacoes().add(valid11);
        regH010.getValidacoes().add(valid12);
        
        b0.getRegistros().add(reg0000);
        b0.getRegistros().add(reg0001);
        bC.getRegistros().add(regC001);
        bC.getRegistros().add(regC100);
        bH.getRegistros().add(regH001);
        bH.getRegistros().add(regH010);
        
        blocos.add(b0);
        blocos.add(bC);
        blocos.add(bH);
        
        modValidTree = new ValidacaoTreeModel(blocos);

1 Resposta

juceliohv

Ninguem?

Criado 20 de outubro de 2011
Ultima resposta 21 de out. de 2011
Respostas 1
Participantes 1