Sei sulla pagina 1di 6

Entenda a classe DefaultTreeModel

A classe DefaultTreeModel a implementao concreta padro da interface TreeModel. Ela


define a raiz e cada n da JTree como instncias da interface TreeNode.
Esta classe tambm mantm uma EventListenerList de TreeModelListeners e fornece vrios
mtodos para disparar TreeModelEvents quando qualquer coisa na JTree mudar.
Um flag asksAllowedChildren mantido a fim de saber se um n permite que ns filhos s
ejam adicionados antes mesmo de tentarmos efetuar a operao.
Outros mtodos tambm definidos por esta classe so:
getPathToRoot(TreeNode aNode, int depth) - Obtm um array de ns a partir de um dete
rminado n at o n raiz;
insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index) - In
sere um novo n no local determinado por index;
removeNodeFromParent(MutableTreeNode node) - Remove um n;
reload(TreeNode node) - Atualiza a JTree a partir de um n determinado.
Entendendo a classe DefaultMutableTreeNode
A classe DefaultMutableTreeNode uma implementao concreta da interface MutableTreeN
ode. Um objeto desta classe pode ter um objeto associado, e tal objeto pode ser
obtido com uma chamada ao mtodo getUserObject(). Esta funcionalidade til quando qu
eremos associar o ttulo de um ns a um identificador de um registro em uma tabela d
e um banco de dados.
Esta classe armazena todos os seus ns filhos em um Vector chamado children, que a
ssociado ao mtodo children(), que retorna um Enumeration de todos os ns filhos. Po
demos tambm usar o mtodo getChildAt() para obter o n correspondente a um determinad
o ndice.
Entendendo a interface TreeModel
A interface TreeModel gerencia os dados a serem usados em uma JTree, assumindo q
ue cada n mantm um array de ns filhos. Ns so representados como Objects e um n raiz se
parado definido.
Esta interface fornece mtodos para:
getChild(Object parent, int index) - Obter um n baseado em um n pai e ndice;
getChildCount(Object parent) - Obter a quantidade de filhos de um determinado n;
getIndexOfChild(Object parent, Object child) - Retornar o ndice de um determinado
n baseado em um determinado pai;
isLeaf(Object node) - Verificar se um determinado ns uma folha (no possui filhos);
valueForPathChanged(TreePath path, Object newValue) - Notificar a JTree que um n
destino de um determinado TreePath foi modificado.
Esta interface tambm fornece mtodos para adicionar ou remover TreeModelListeners,
os quais devem ser notificados quando ns so adicionados, removidos ou alterados. E
stes mtodos so: addTreeModelListener(TreeModelListener l) e removeTreeModelListene
r(TreeModelListener l). O TreeModel de uma JTree pode ser obtido ou definido usa
ndo-se os mtodos getModel() e setModel().
/*
Este exemplo mostra como criar uma JTree bem
simples. Os itens so fornecidos como um array
de objetos, de forma que cada sub-array
constitui uma seo da rvore. Os elementos so
inseridos em suas devidas posies usando uma
funo recursiva.
*/
import javax.swing.*;
import java.awt.*;
import javax.swing.tree.*;
public class Estudos extends JFrame{
public Estudos(){
super("Exemplo de uma JTree simples");
Object[] linguagens = {
"Linguagens",
new Object[]{
"Compiladas",
"C++",
"Delphi"
},
new Object[]{
"Interpretadas",
"JavaScript",
"Python",
"Ruby"
}
};
DefaultMutableTreeNode raiz = montar(linguagens);
JTree arvore = new JTree(raiz);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JScrollPane scrollPane = new JScrollPane(arvore);
c.add(scrollPane);

setSize(400, 300);
setVisible(true);
}
public static void main(String args[]){
Estudos app = new Estudos();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private DefaultMutableTreeNode montar(Object[] hier){
DefaultMutableTreeNode no = new DefaultMutableTreeNode(hier[0]), filho;

for(int i = 1; i < hier.length; i++){
Object n_no = hier[i];
if(n_no instanceof Object[]) // n possui filhos
filho = montar((Object[])n_no);
else
filho = new DefaultMutableTreeNode(n_no); // folha
no.add(filho);
}
return(no);
}
}
/*
Este exemplo mostra como obter o texto de um
tem selecionado na JTree.
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.tree.*;
public class Estudos extends JFrame{
JTree arvore;
public Estudos(){
super("Exemplo de uma JTree simples");
DefaultMutableTreeNode raiz = montarArvore();
arvore = new JTree(raiz);
JButton btn = new JButton("Obter Texto");
btn.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
if(!arvore.isSelectionEmpty()){
DefaultMutableTreeNode no = (DefaultMutableTreeNode)
arvore.getLastSelectedPathComponent();
JOptionPane.showMessageDialog(null,
"Texto do tem selecionado: " + no.toString(),
"JTree", JOptionPane.INFORMATION_MESSAGE);
}
}
}
);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JScrollPane scrollPane = new JScrollPane(arvore);
c.add(scrollPane);
c.add(btn);

setSize(400, 300);
setVisible(true);
}
public static void main(String args[]){
Estudos app = new Estudos();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private DefaultMutableTreeNode montarArvore(){
DefaultMutableTreeNode raiz = new DefaultMutableTreeNode("Cidades");
DefaultMutableTreeNode regiao = new DefaultMutableTreeNode("Regio");
regiao.add(new DefaultMutableTreeNode("Centro-Oeste"));
regiao.add(new DefaultMutableTreeNode("Norte"));
regiao.add(new DefaultMutableTreeNode("Sul"));

raiz.add(regiao);
return raiz;
}
}
/*
Este exemplo mostra como criar uma JTree bem
simples. Os itens so fornecidos a partir de um
mtodo.
*/
import javax.swing.*;
import java.awt.*;
import javax.swing.tree.*;
public class Estudos extends JFrame{
public Estudos(){
super("Exemplo de uma JTree simples");
DefaultMutableTreeNode raiz = montarArvore();
JTree arvore = new JTree(raiz);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JScrollPane scrollPane = new JScrollPane(arvore);
c.add(scrollPane);

setSize(400, 300);
setVisible(true);
}
public static void main(String args[]){
Estudos app = new Estudos();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private DefaultMutableTreeNode montarArvore(){
DefaultMutableTreeNode raiz = new DefaultMutableTreeNode("Cidades");
DefaultMutableTreeNode regiao = new DefaultMutableTreeNode("Regio");
regiao.add(new DefaultMutableTreeNode("Centro-Oeste"));
regiao.add(new DefaultMutableTreeNode("Norte"));
regiao.add(new DefaultMutableTreeNode("Sul"));

raiz.add(regiao);
return raiz;
}
}
/*
Este exemplo mostra como saber se o
tem selecionado na JTree possui filhos.
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.tree.*;
public class Estudos extends JFrame{
JTree arvore;
public Estudos(){
super("Exemplo de uma JTree simples");
DefaultMutableTreeNode raiz = montarArvore();
arvore = new JTree(raiz);
JButton btn = new JButton("Obter Texto");
btn.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
if(!arvore.isSelectionEmpty()){
DefaultMutableTreeNode no = (DefaultMutableTreeNode)
arvore.getLastSelectedPathComponent();
if(no.isLeaf())
JOptionPane.showMessageDialog(null,
"Este tem NO possui filhos", "JTree",
JOptionPane.INFORMATION_MESSAGE);
else
JOptionPane.showMessageDialog(null,
"Este tem possui filhos", "JTree",
JOptionPane.INFORMATION_MESSAGE);
}
}
}
);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JScrollPane scrollPane = new JScrollPane(arvore);
c.add(scrollPane);
c.add(btn);

setSize(400, 300);
setVisible(true);
}
public static void main(String args[]){
Estudos app = new Estudos();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private DefaultMutableTreeNode montarArvore(){
DefaultMutableTreeNode raiz = new DefaultMutableTreeNode("Cidades");
DefaultMutableTreeNode regiao = new DefaultMutableTreeNode("Regio");
regiao.add(new DefaultMutableTreeNode("Centro-Oeste"));
regiao.add(new DefaultMutableTreeNode("Norte"));
regiao.add(new DefaultMutableTreeNode("Sul"));

raiz.add(regiao);
return raiz;
}
}

Potrebbero piacerti anche