[Java]Classe JTree
Exemplo de sua utilização
Escrito por Thiago Ananias em
JSP e Java. Data: 30/08/2006
Licença: Alguns direitos reservados. Dar créditos ao autor e linkar este original
Ver tópico original no fórum.
CODE
import javax.swing.JTree;
import javax.swing.JFrame;
import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.Container;
public class Arvore extends JFrame{
private JTree arvore;
public Arvore(){
DefaultMutableTreeNode raiz, no1, no2;
raiz = new DefaultMutableTreeNode("Carros");
no1 = new DefaultMutableTreeNode("Volks");
no2 = new DefaultMutableTreeNode("Ford");
raiz.add(no1);
raiz.add(no2);
no1.add(new DefaultMutableTreeNode("Gol"));
no1.add(new DefaultMutableTreeNode("Fusca"));
no1.add(new DefaultMutableTreeNode("Fox"));
no2.add(new DefaultMutableTreeNode("Focus"));
no2.add(new DefaultMutableTreeNode("Ka"));
no2.add(new DefaultMutableTreeNode("Fiesta"));
arvore = new JTree(raiz);
Container cp = getContentPane();
setSize(400, 300);
setTitle("Usando JTree");
cp.add(arvore);
}
public static void main(String args[]) {
new Arvore().show();
}
}
Fiz de um jeito bem simples para um melhor entendimento !
Comentários:
Thiago Ananias disse:
Mas como deixa-la com a seguinte aparência:
Eu mudei o icone para o "+" e o "-" acho que assim fica mais amigável ! vamos ao codigo ver como se altera isso:
Arvore.java
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.ImageIcon;
import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.Container;
public class Arvore extends JFrame{
private JTree arvore;
public Arvore(){
DefaultMutableTreeNode raiz, no1, no2;
UIManager.put("Tree.expandedIcon", new ImageIcon("menos.gif"));
UIManager.put("Tree.collapsedIcon", new ImageIcon("mais.gif"));
raiz = new DefaultMutableTreeNode("Carros");
no1 = new DefaultMutableTreeNode("Volks");
no2 = new DefaultMutableTreeNode("Ford");
raiz.add(no1);
raiz.add(no2);
no1.add(new DefaultMutableTreeNode("Gol"));
no1.add(new DefaultMutableTreeNode("Fusca"));
no1.add(new DefaultMutableTreeNode("Fox"));
no2.add(new DefaultMutableTreeNode("Focus"));
no2.add(new DefaultMutableTreeNode("Ka"));
no2.add(new DefaultMutableTreeNode("Fiesta"));
arvore = new JTree(raiz);
Container cp = getContentPane();
setSize(400, 300);
setTitle("Usando JTree");
cp.add(arvore);
}
public static void main(String args[]) {
new Arvore().show();
}
}
Se vocês notarem é o mesmo código que eu postei quando abri este tópico com 4 linhas a mais, vamos a explicação delas:
import javax.swing.UIManager
import javax.swing.ImageIcon
Estas duas servem para importar as Classes "ImageIcon" e a "UIManager" para personalizarmos a JTree
UIManager.put("Tree.expandedIcon", new ImageIcon("menos.gif"));
UIManager.put("Tree.collapsedIcon", new ImageIcon("mais.gif"));
Estas linhas servem para setar a imagem que queremos, sendo que pode ser qualquer uma... é soh especificar o caminho.
É isso pessoal !
Thiago Ananias disse:
import java.awt.Dimension;
import java.awt.Color;
import java.awt.Container;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode; // --> Responsável pela
criação da estrutura de sua JTree
import javax.swing.tree.DefaultTreeCellRenderer; // --> Personaliza a sua
JTree, por exemplo cores icones de exibicao
import javax.swing.UIManager;
public class Default extends JFrame implements TreeSelectionListener,
TreeExpansionListener {
JLabel Status = new JLabel("Escolha um node");
Container cp = getContentPane();
DefaultMutableTreeNode marcas, volkswagem, fiat, ford, mercedes;
DefaultTreeCellRenderer Renderer = new DefaultTreeCellRenderer();
JTree raiz;
public Default() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) {}
setTitle("JTree com eventos");
setSize(400, 300);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
centerJFrame(this);
/* AKI CRIAMOS O ESKELETO DA JTREE */
//**********************************//
marcas = new DefaultMutableTreeNode("Marcas");
volkswagem = new DefaultMutableTreeNode("Volksvagem");
fiat = new DefaultMutableTreeNode("Fiat");
ford = new DefaultMutableTreeNode("Ford");
mercedes = new DefaultMutableTreeNode("Mercedes");
DefaultMutableTreeNode fusca = new
DefaultMutableTreeNode("Fusca");
DefaultMutableTreeNode brasilia = new
DefaultMutableTreeNode("Brasilia");
DefaultMutableTreeNode passat = new
DefaultMutableTreeNode("Passat");
volkswagem.add(fusca);
volkswagem.add(brasilia);
volkswagem.add(passat);
marcas.add(volkswagem);
marcas.add(fiat);
marcas.add(ford);
marcas.add(mercedes);
//**********************************//
/* AKI CRIAMOS O ESKELETO DA JTREE */
raiz = new JTree(marcas);
raiz.addTreeSelectionListener(this);
raiz.addTreeExpansionListener(this);
Renderer.setTextSelectionColor(Color.WHITE);
Renderer.setBackgroundSelectionColor(Color.DARK_GRAY);
Renderer.setBackground(Color.BLACK);
Renderer.setTextNonSelectionColor(Color.BLUE);
raiz.setCellRenderer(Renderer); //--> Se adicionar este vai ser o
seu personalizado, experimente comentar esta linha
cp.add(raiz, BorderLayout.CENTER);
cp.add(Status, "South");
}
/* EVENTO RELACIONADO AO MUDAR DE ITENS */
public void valueChanged(TreeSelectionEvent e) {
Status.setText(raiz.getLastSelectedPathComponent().toString());
}
/* EVENTO RELACIONADO AO MUDAR DE ITENS */
/* EVENTOS RELACIONADOS AO ABRIR E FECHAR OS NODES */
public void treeCollapsed(TreeExpansionEvent e) {
Status.setText("Aba " +
raiz.getLastSelectedPathComponent().toString() + " fechada");
}
public void treeExpanded(TreeExpansionEvent e) {
Status.setText("Aba " +
raiz.getLastSelectedPathComponent().toString() + " aberta");
}
/* EVENTOS RELACIONADOS AO ABRIR E FECHAR OS NODES */
private void centerJFrame (JFrame frame) {
Dimension paneSize = frame.getSize();
Dimension screenSize = frame.getToolkit().getScreenSize();
frame.setLocation( (screenSize.width - paneSize.width) / 2,
(screenSize.height - paneSize.height) / 2);
}
public static void main(String args[]) {
new Default().show();
}
}
Leandro Mercês Xavier disse:
Os exemplos de código Java utilizando eventos são realmente muito úteis.
Só um detalhe nesse código, que você já deve saber porém não percebeu ao postar quanto ao método show() do Container que está obsoleto, hoje usa-se setVisible(true).
Obrigado.
Thiago Ananias disse:
Opa só para constar, uma coisa que percebi, quando tem um botão e vc quer fazer a acao dele vc tem que implementar a Classe "ActionListener" e quando eh a JTree eh a "TreeSelectionListener", e quando vc implementa a Classe e naum coloca as suas ações, por exemplo, a actionPerformed do botão ele fica sublinhado, mostrando que há erro!!! Entaum vc coloca o mouse em cima e vai ver quais são os métodos que vc tem que implementar, entuam mesmo sem conhecer a Classe você sai fazendo!!!
Ver o restante dos comentários no fórum (e aproveitar pra comentar também !).