Bom dia pessoal, estou tentando criar um TreeTable dinamico e que renderize um textbox em uma das colunas
é o seguinte, na tabela Cliente tem veiculo e ao lado do veiculo vai ter um textbox para informar uma quantidade. Estava seguindo um tutorial, mas não conseguir desenvolver todo. Mostro os veiculos mas não mostro o cliente, dono do veiculo.
aqui as minhas classes:
//este aqui é o veiculomodel que vai estar dentro do clientemodel. E acho que vou ter que colocar um render aqui para o textbox
public class VeiculoModel extends DefaultMutableTreeNode{
private Veiculo veiculo;
public VeiculoModel(Veiculo veiculo) {
this.veiculo = veiculo;
}
@Override
public String toString() {
return veiculo.getModelo().getNome();
}
}
Aqui o clientemodel:
//este cara vai ser o root do node
public class ClienteModel extends DefaultMutableTreeNode{
private ClienteModel parent;
private Cliente cliente;
private List<VeiculoModel> childs;
public ClienteModel(Cliente cliente) {
childs = new ArrayList<VeiculoModel>();
this.cliente = cliente;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public List<VeiculoModel> getChilds() {
return childs;
}
public void setChilds(List<VeiculoModel> childs) {
this.childs = childs;
}
public void setParent(ClienteModel parent) {
this.parent = parent;
}
public void addChild(VeiculoModel veiculoModel){
veiculoModel.setParent(parent);
childs.add(veiculoModel);
}
@Override
public TreeNode getChildAt(int index) {
return childs.get(index);
}
@Override
public int getChildCount() {
return childs.size();
}
@Override
public TreeNode getParent() {
return parent;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final ClienteModel other = (ClienteModel) obj;
if (this.parent != other.parent && (this.parent == null || !this.parent.equals(other.parent))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 97 * hash + (this.parent != null ? this.parent.hashCode() : 0);
return hash;
}
@Override
public String toString() {
return cliente.getNome();
}
}
aqui o cara que monta o tree table de fato:
//este cara é encarregado de pegar o cliente ( que já tem os veiculos) e mostrar a treetable
public class ClienteVeiculoTreeTableModel extends DefaultTreeTableModel{
private List<String> nomesColunas;
public ClienteVeiculoTreeTableModel(ClienteModel clienteModel) {
super(clienteModel);
nomesColunas = new ArrayList<String>();
nomesColunas.add("NOME CLIENTE");
nomesColunas.add("QTD FOTOS");
}
@Override
public int getColumnCount() {
return nomesColunas.size();
}
@Override
public String getColumnName(int column) {
return nomesColunas.get(column);
}
@Override
public boolean isCellEditable(Object node, int column) {
return false;
}
@Override
public Object getValueAt(Object node, int column) {
String value = null;
if(node instanceof ClienteModel){
ClienteModel cm = (ClienteModel)node;
value = cm.toString();
}else if(node instanceof VeiculoModel){
VeiculoModel vm = (VeiculoModel)node;
value = vm.toString();
}
return value;
}
}
//aqui vai o main de teste para ver isto funcionando ( mas não funciona ) mostra só os carros mas não mostra o cliente
public class MainTreeTable {
public static void main(String[] args) {
Veiculo v1 = new Veiculo();
v1.setIdVeiculo(new Long(1));
Modelo md1 = new Modelo(1);
md1.setNome("Gol");
v1.setModelo(md1);
VeiculoModel vm1 = new VeiculoModel(v1);
Veiculo v2 = new Veiculo();
v2.setIdVeiculo(new Long(2));
Modelo md2 = new Modelo(2);
md2.setNome("Fiat");
v2.setModelo(md2);
VeiculoModel vm2 = new VeiculoModel(v2);
Cliente c1 = new Cliente(new Long(1));
c1.setNome("Loja Carro");
ClienteModel cm1 = new ClienteModel(c1);
cm1.addChild(vm1);
cm1.addChild(vm2);
createGUI(cm1);
}
private static void createGUI(ClienteModel cm) {
JFrame frame = new JFrame("Teste de Tree Table Cliente, Carro e Qtd fotos");
frame.setSize(500, 300);
frame.setLocationRelativeTo(null);
frame.setLayout(new BorderLayout());
JXTreeTable tree = treeTable(cm);
// JTree tree2 = convetionalTree(p);
JScrollPane s1 = new JScrollPane(tree);
// JScrollPane s2 = new JScrollPane(tree2);
s1.setPreferredSize(new Dimension(400, 100));
// s2.setPreferredSize(new Dimension(150, 100));
frame.add(s1, BorderLayout.EAST);
// frame.add(s2, BorderLayout.WEST);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private static JXTreeTable treeTable(ClienteModel cm) {
JXTreeTable tree = new JXTreeTable(new ClienteVeiculoTreeTableModel(cm));
return tree;
}
}
Ps.: tentei e estou tentando de tudo. Gostaria de pedir a ajuda dos senhores e desde já agradeço