作成されたクラスのインスタンスを表示する動的 Jtree を実装するにはどうすればよいですか?
たとえば、アプリで新しい Book(name) を作成できます。すべての本には、チャプター = チャプターの ArrayList を指定できます。そして今、それからどのようにjtreeを行うことができますか?
独自のモデルを実装することもできます。これは、グループとユーザーのグループ用に作成したものです。
public class GrupoUserTreeModel implements TreeModel
{
private String raiz;
private ArrayList<Grupo> grupos = new ArrayList<Grupo>();
private List<TreeModelListener> listeners = new ArrayList<TreeModelListener>();
public GrupoUserTreeModel(String raiz)
{
this.raiz = raiz;
}
public Object getRoot()
{
return raiz;
}
private void fireTreeStructureChanged()
{
Object[] o = {raiz};
TreeModelEvent e = new TreeModelEvent(this, o);
for(TreeModelListener l : listeners)
l.treeStructureChanged(e);
}
public void addGrupo(Grupo grupo)
{
grupos.add(grupo);
fireTreeStructureChanged();
}
public void addUsuario(Grupo grupo, Usuario usuario)
{
Grupo g = grupos.get(grupos.indexOf(grupo));
g.getUsuarios().add(usuario);
TreePath p = new TreePath(new Object[]{g});
this.fireTreeStructureChanged();
}
public void limpar()
{
grupos.clear();
this.fireTreeStructureChanged();
}
public void removeGrupo(Grupo grupo)
{
if(!grupos.remove(grupo))
throw new NullPointerException("Grupo: "+grupo+" inexistente na Tree");
this.fireTreeStructureChanged();
}
public ArrayList<Grupo> getGrupos()
{
return this.grupos;
}
public void setGrupos(ArrayList<Grupo> grupos)
{
this.grupos = grupos;
this.fireTreeStructureChanged();
}
public ArrayList<Usuario> getUsuarios(Grupo grupo)
{
Grupo g = grupos.get(grupos.indexOf(grupo));
return g.getUsuarios();
}
public void removeUsuario(Grupo grupo, Usuario usuario)
{
Grupo g = grupos.get(grupos.indexOf(grupo));
if(!(g.getUsuarios()).remove(usuario))
throw new NullPointerException("Usuário: "+usuario+" inexistente no Grupo: "+
grupo+" na Tree");
TreePath p = new TreePath(new Object[]{g});
this.fireTreeStructureChanged();
}
public Object getChild(Object parent, int index)
{
if(parent == raiz)
{
return grupos.get(index);
}
if(parent instanceof Grupo)
{
Grupo g = grupos.get(grupos.indexOf(parent));
return g.getUsuarios().get(index);
}
throw new IllegalArgumentException("Parent não é de um tipo suportado pela Tree");
}
public int getChildCount(Object parent)
{
if(parent == raiz)
return grupos.size();
if(parent instanceof Grupo)
{
Grupo g = grupos.get(grupos.indexOf(parent));
return g.getUsuarios().size();
}
throw new IllegalArgumentException("Parent não é de um tipo suportado pela Tree");
}
public boolean isLeaf(Object node)
{
return node instanceof Usuario;
}
public void valueForPathChanged(TreePath path, Object newValue)
{
}
public int getIndexOfChild(Object parent, Object child)
{
if(parent == raiz)
return grupos.indexOf(child);
if(parent instanceof Grupo)
return grupos.get(grupos.indexOf(child)).getUsuarios().size();
return 0;
}
public void addTreeModelListener(TreeModelListener l)
{
listeners.add(l);
}
public void removeTreeModelListener(TreeModelListener l)
{
listeners.remove(l);
}
}
public class Grupo
{
private ArrayList<Usuario> usuarios = new ArrayList<Usuario>();
private String nome;
public Grupo(String nome)
{
this.nome = nome;
}
/**
* @return the usuarios
*/
public ArrayList<Usuario> getUsuarios() {
return usuarios;
}
/**
* @param usuarios the usuarios to set
*/
public void setUsuarios(ArrayList<Usuario> usuarios) {
this.usuarios = usuarios;
}
/**
* @return the nome
*/
public String getNome() {
return nome;
}
/**
* @param nome the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}
public String toString()
{
return this.nome;
}
public boolean equals(Object outro)
{
if(outro instanceof Grupo)
{
Grupo o = (Grupo) outro;
return o.getNome().equals(this.getNome());
}
return false;
}
}
public class Usuario
{
private String nome;
public Usuario(String nome)
{
this.nome = nome;
}
/**
* @return the nome
*/
public String getNome() {
return nome;
}
/**
* @param nome the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}
public String toString()
{
return this.nome;
}
public boolean equals(Object outro)
{
if(outro instanceof Usuario)
{
Usuario o = (Usuario) outro;
return o.getNome().equals(this.getNome());
}
return false;
}
}