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;
}
}
/*
* 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");
}
}
//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);
