JTree

Boa tarde pessoas!!!

Preciso de uma ajuda com JTree, alguém pode me ajudar?
Eu preciso criar um JTree que seja espelho de uma outra, mostrando somente os nós da primeira.

Alguém pode me ajudar, please???

A JTree é construída com base no TreeModel que ela recebe como parâmetro. Se você criar dois TreeModel que possuem os mesmos dados como base, seria mais fácil a sincronização das árvores.

Se você especificar mais o problema talvez seja mais fácil de dar uma outra dica…

Bom dia Eduardo!

Primeiramente obrigada pela ajuda!

Então, eu estou montando um sistema que tem como menu principal uma JTree, e eu quero que ela tenha o mesmo comportamento do Windows Explorer, mas não estou conseguindo fazer isso…

Ficou mais claro agora?
Estou há dias tentando e até agora nada!
Precisava muito disso, pois o sistema é para o meu TCC.

OK!

Onde exatamente você está sentindo dificuldade? Qual JTree você deseja espelhar?

Boa tarde Eduardo!

Segue o meu código.
Eu quero que a árvore do lado direito mostre somente os subnós da árvore do canto esquerdo, igualzinho acontece no Windows Explorer.

Você pode me ajudar?

package visao;
import java.awt.FocusTraversalPolicy;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.awt.*;
import javax.swing.JPanel.*;
import javax.swing.*;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreeNode;
import visao.*;
import java.awt.Component.*;
import visao.GUILogon;

/**
 *
 * @author  Evelyn
 */
public class GUIMenu extends javax.swing.JPanel implements InterfaceHead{
    
    private String no;

    private GUILogon usuario;
    
    /** Creates new form menu */
    public GUIMenu() {
        this.usuario = usuario;
        initComponents();
        
        
    }
    
    
    
        
        
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jPanel2 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        arvore_menu = new javax.swing.JTree();
        lbl_pastas = new javax.swing.JLabel();
        txt_caminho = new javax.swing.JTextField();
        lbl_caminho = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        arvore_espelho = new javax.swing.JTree();
        head1 = new visao.head();

        setMaximumSize(new java.awt.Dimension(713, 410));
        setMinimumSize(new java.awt.Dimension(713, 410));
        setPreferredSize(new java.awt.Dimension(713, 410));
        jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        arvore_menu.setModel(criaArvore());
        arvore_menu.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                arvore_menuMouseClicked(evt);
            }
        });

        jScrollPane1.setViewportView(arvore_menu);

        lbl_pastas.setFont(new java.awt.Font("Tahoma", 1, 11));
        lbl_pastas.setText("Pastas");

        txt_caminho.setEditable(false);

        lbl_caminho.setFont(new java.awt.Font("Tahoma", 1, 11));
        lbl_caminho.setText("Conte\u00fado de:");

        arvore_espelho.setModel(criaArvore());
        jScrollPane2.setViewportView(arvore_espelho);

        org.jdesktop.layout.GroupLayout jPanel2Layout = new org.jdesktop.layout.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(lbl_pastas)
                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jPanel2Layout.createSequentialGroup()
                        .add(lbl_caminho)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(txt_caminho, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 388, Short.MAX_VALUE))
                    .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 466, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(lbl_pastas)
                    .add(lbl_caminho)
                    .add(txt_caminho, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                    .add(jScrollPane2, 0, 0, Short.MAX_VALUE)
                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 287, Short.MAX_VALUE))
                .addContainerGap())
        );

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(head1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 713, Short.MAX_VALUE)
            .add(layout.createSequentialGroup()
                .add(10, 10, 10)
                .add(jPanel2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .add(10, 10, 10))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(head1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jPanel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(19, Short.MAX_VALUE))
        );
    }// </editor-fold>//GEN-END:initComponents
        
    private void arvore_menuMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_arvore_menuMouseClicked
// TODO add your handling code here:
        txt_caminho.setText(this.alteraString(arvore_menu.getSelectionPath().toString(),",","/"));
        if(evt.getClickCount()== 2) {
            String noSelecionado = arvore_menu.getLastSelectedPathComponent().toString();
            String no = arvore_menu.getLastSelectedPathComponent().toString();
       
            mostraJanela(noSelecionado);
            System.out.println("Abrindo: " + arvore_menu.getLastSelectedPathComponent().toString());           
        } 
    }//GEN-LAST:event_arvore_menuMouseClicked
    
    
    
    public void mostraJanela(String nomeJanela){
        
        // JOptionPane.showMessageDialog(null,nomeJanela,"",JOptionPane.INFORMATION_MESSAGE);
        
        if(nomeJanela.equals("Stakeholder")){
            
            JFrame tela = new JFrame();
            tela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            GUIStakeholder stake = new GUIStakeholder();
            tela.add(stake);
            tela.setSize(585,480);
            tela.setLocation(35,20);
            tela.setVisible(true);
            tela.setResizable(false);
            tela.setTitle("Manutenção de Stakeholder");
            
        } else if(nomeJanela.equals("Usuário")){
            
            JFrame tela = new JFrame();
            tela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            GUIUsuario usuario = new GUIUsuario();
            tela.add(usuario);
            tela.setSize(500,260);
            tela.setLocation(35,20);
            tela.setVisible(true);
            tela.setResizable(false);
            tela.setTitle("Manutenção de Usuários");
            
        } else if(nomeJanela.equals("Recurso")){
            
            JFrame tela = new JFrame();
            tela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            GUIRecurso recurso = new GUIRecurso();
            tela.add(recurso);
            tela.setSize(590, 355);
            tela.setLocation(35,20);
            tela.setVisible(true);
            tela.setResizable(false);
            tela.setTitle("Manutenção de Recurso");
            
        } else if(nomeJanela.equals("Fases")){
            
            JFrame tela = new JFrame();
            tela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            GUIFase fase = new GUIFase();
            tela.add(fase);
            tela.setSize(500, 205);
            tela.setLocation(35, 20);
            tela.setVisible(true);
            tela.setResizable(false);
            tela.setTitle("Manutenção de Fases");
            
        } else if(nomeJanela.equals("Treinamentos")){
            
            JFrame tela = new JFrame();
            tela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            GUITreinamento treino = new GUITreinamento();
            tela.add(treino);
            tela.setSize(535, 340);
            tela.setLocation(35,20);
            tela.setVisible(true);
            tela.setResizable(false);
            tela.setTitle("Manutenção de Treinamentos");
            
        } else if(nomeJanela.equals("Tipos de Projetos")){
            
            JFrame tela = new JFrame();
            tela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            GUITipoProjeto tipo = new GUITipoProjeto();
            tela.add(tipo);
            tela.setSize(500, 205);
            tela.setLocation(35,20);
            tela.setVisible(true);
            tela.setResizable(false);
            tela.setTitle("Manutenção de Tipos de Projetos");
            
        } else if(nomeJanela.equals("Ciclos de Vida")){
            
            JFrame tela = new JFrame();
            tela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            GUICicloVida ciclo = new GUICicloVida();
            tela.add(ciclo);
            tela.setSize(510, 205);
            tela.setLocation(35, 20);
            tela.setVisible(true);
            tela.setResizable(false);
            tela.setTitle("Manutenção de Ciclos de Vida");
            
        }else if(nomeJanela.equals("Matriz")){
            
            JFrame tela = new JFrame();
            tela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            GUIMatriz matriz = new GUIMatriz();
            tela.add(matriz);
            tela.setSize(500, 200);
            tela.setLocation(35, 20);
            tela.setVisible(true);
            tela.setResizable(false);
            tela.setTitle("Manutenção de Matriz");
            
        }else if(nomeJanela.equals("Matriz de Alocação")){
            
            JFrame tela = new JFrame();
            tela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            GUIAlocacao aloca = new GUIAlocacao();
            tela.add(aloca);
            tela.setSize(495, 320);
            tela.setLocation(35,20);
            tela.setVisible(true);
            tela.setResizable(false);
            tela.setTitle("Matriz de Alocação");
            
        }else if(nomeJanela.equals("Projetos")){
            
            JFrame tela = new JFrame();
            tela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            GUIProjeto projeto = new GUIProjeto();
            tela.add(projeto);
            tela.setSize(595,410);
            tela.setLocation(35,20);
            tela.setVisible(true);
            tela.setResizable(false);
            tela.setTitle("Manutenção de Projetos");
            
        }else if(nomeJanela.equals("Fases do Ciclo de Vida")){
            JFrame tela = new JFrame();
            tela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            GUIItemCiclo item = new GUIItemCiclo();
            tela.add(item);
            tela.setSize(500, 205);
            tela.setLocation(35,20);
            tela.setVisible(true);
            tela.setResizable(false);
            tela.setTitle("Manutenção das Fases de Um Ciclo de Vida");
        }
    }
    
    
    public static String alteraString(CharSequence texto, String altera, String novo){
        Pattern pattern = Pattern.compile(altera);
        Matcher matcher = pattern.matcher(texto);
        return matcher.replaceAll(novo).toString();
    }
    
    public DefaultTreeModel criaArvore() {
        
        DefaultMutableTreeNode apoio = new DefaultMutableTreeNode("Modulo de Apoio");
        
        DefaultMutableTreeNode no1 = new DefaultMutableTreeNode("Cadastro");
        apoio.add(no1);
        no1.add(new DefaultMutableTreeNode("Matriz"));
        no1.add(new DefaultMutableTreeNode("Matriz de Alocação"));
        no1.add(new DefaultMutableTreeNode("Recurso"));
        no1.add(new DefaultMutableTreeNode("Stakeholder"));
        no1.add(new DefaultMutableTreeNode("Usuário"));
        
        
        DefaultMutableTreeNode cmmi = new DefaultMutableTreeNode("Processos CMMI");
        
        DefaultMutableTreeNode nor1 = new DefaultMutableTreeNode("Cadastro");
        cmmi.add(nor1);
        nor1.add(new DefaultMutableTreeNode("Ciclos de Vida"));
        nor1.add(new DefaultMutableTreeNode("Fases"));
        nor1.add(new DefaultMutableTreeNode("Fases do Ciclo de Vida"));
        nor1.add(new DefaultMutableTreeNode("Projetos"));
        nor1.add(new DefaultMutableTreeNode("Tipos de Projetos"));
        nor1.add(new DefaultMutableTreeNode("Treinamentos"));
        
        DefaultMutableTreeNode raiz = new DefaultMutableTreeNode("");
        raiz.add(apoio);
        raiz.add(cmmi);
                        
        return new DefaultTreeModel(raiz);
        
    }
        
    public DefaultTreeModel espelhoApoio(){
        
        
        DefaultMutableTreeNode apoio = new DefaultMutableTreeNode("Modulo de Apoio");
        DefaultMutableTreeNode no1 = new DefaultMutableTreeNode("Cadastro");
        apoio.add(apoio);
        
        return new DefaultTreeModel(apoio);
        
    }
    
    
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTree arvore_espelho;
    private javax.swing.JTree arvore_menu;
    private visao.head head1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel lbl_caminho;
    private javax.swing.JLabel lbl_pastas;
    private javax.swing.JTextField txt_caminho;
    // End of variables declaration//GEN-END:variables
    
    FocusTraversalPolicy newPolicy;
    
}

Faça o seguinte:

  • Crie um objeto de negócios com os dados que você vai colocar na arvore
  • Crie duas classes TreeModel, sendo que ambas recebem este mesmo objeto como parametro
  • Dentro dos TreeModel você vai criar uma lógica para a exibição somente dos dados que você desejar em cada árvore.

Nesta abordagem você lida com um problema de cada vez…

Espero ter ajudado…

Boa tarde

Um dias desses tambem precisei criar uma arvore parecida com a do windows explorer , em primeiro momento consegui mas nao havia ficado perfeita porque ela nao era dinamica, depois de um tempo pesquisando consegui fazer ela alem de parecida com a do windows ser tb dinamica.
Um link que me ajudou bastante foi o seguinte:

http://www.java2s.com/Code/Java/File-Input-Output/FileTreeDemo.htm

Da uma olha ve se ajuda

Abraços …
Rodrigo Santos

Boa tarde Eduardo!

Eu não entendi muito bem seu último post:

Você poderia me passar um exemplo?
Eu sou bastante leiga no assunto, estou aprendendo ainda…

Obrigada!