Tenho uma GUI onde tenho dois JPanel, um cima e outro em baixo. No de cima criei uma arvore de diretórios usando JTree, neste panel deixei a arvore mostrando apenas os diretórios porque preciso que no panel de baixo seja mostrado apenas os arquivos daquele diretório.
Segue a imagem:
Já pensei diversas formas de fazê-lo, já pesquisei também sobre isso, mas não consegui! Não sei como devo adicionar esses “arquivos” (os nomes deles na verdade) no panel de baixo.
Não sei se deu pra entender direito, se precisar posso passar o código aqui.
Beleza Thiago, ignora os comentários. Fui eu tentando resolver isso, ignora tb as tentativas ae com File, arrayList e etc =D
privatevoidcreateAndShowGUI(){this.setBounds(100,200,530,370);this.setPreferredSize(newDimension(530,370));this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);this.setLayout(null);this.formatPanelButtons();this.formatPanelTree();if(this.gauges!=null){this.insertDataIntoTable();}}privatevoidformatPanelTree(){// this.listFiles = new JList();// filesVector = new Vector<File>();this.panelLeft=newJPanel(newGridLayout(1,0));this.panelLeft.setBackground(this.getBackground());this.panelLeft.setBounds(20,20,340,300);this.panelLeft.setVisible(true);//building treethis.tree=this.buildTreeDirectories();this.tree.setRootVisible(false);this.tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);renderer=(DefaultTreeCellRenderer)this.tree.getCellRenderer();renderer.setLeafIcon(renderer.getDefaultOpenIcon());this.tree.setVisible(true);tree.addTreeSelectionListener(this);this.formatPanelTreeOfDirectories();this.formatPanelTreeFiles();JSplitPanesplitPane=newJSplitPane(JSplitPane.VERTICAL_SPLIT);splitPane.setTopComponent(this.panelDir);splitPane.setBottomComponent(this.panelFiles);DimensionminimumSize=newDimension(100,50);this.panelDir.setMinimumSize(minimumSize);this.panelFiles.setMinimumSize(minimumSize);splitPane.setDividerLocation(150);splitPane.setPreferredSize(newDimension(500,300));splitPane.setVisible(true);// this.panelFiles.add(listFiles);this.panelLeft.add(splitPane);this.add(this.panelLeft);}privatevoidformatPanelTreeFiles(){this.panelFiles=newJScrollPane();this.panelFiles.setBorder(newEtchedBorder());// this.panelFiles.setBackground(Color.WHITE);// JList listFiles = new JList();if(this.onlyFiles!=null){for(inti=0;i<this.onlyFiles.length;i++){System.out.println(this.onlyFiles[i].getName());}this.panelFiles.add(this.renderer.getComponent(0));// listFiles.setListData(onlyFiles);}// this.panelFiles.add(listFiles);this.panelFiles.setVisible(true);}privatevoidformatPanelTreeOfDirectories(){this.panelDir=newJScrollPane(this.tree);this.panelDir.setBorder(newEtchedBorder());this.panelDir.setVisible(true);}publicJTreebuildTreeDirectories(){DefaultMutableTreeNoderoot=newDefaultMutableTreeNode("root",true);this.getListFiles(root,newFile("C:/Arquivos de programas/"));JTreetree=newJTree(root);returntree;}privatevoidgetListFiles(DefaultMutableTreeNodenode,Filef){if(!f.isDirectory()){// DefaultMutableTreeNode childFile = new DefaultMutableTreeNode(f);// node.add(childFile);}else{DefaultMutableTreeNodechild=newDefaultMutableTreeNode(f);node.add(child);FilefileList[]=f.listFiles();for(inti=0;i<fileList.length;i++)getListFiles(child,fileList[i]);}}publicvoidvalueChanged(TreeSelectionEvente){DefaultMutableTreeNodenode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();//fazer com que isso vire global pra que eu pegue de la do metodo de cima os// objetos que neste metodo foram construido e os adicione no panel de baixo.// aparentemente fácil =D// Vector<File> filesVector = new Vector<File>();if(node==null)return;FilefileChild=(File)node.getUserObject();//cria um array de files contidos naquele icone selecionadoFile[]files=fileChild.listFiles();// File[] onlyFiles;intj=0;for(inti=0;i<files.length;i++){if(files[i].isFile())j++;}this.onlyFiles=newFile[j];for(inti=0,k=0;i<files.length;i++){if(files[i].isFile()){this.onlyFiles[k]=newFile(files[i].getPath());k++;}}for(inti=0;i<this.onlyFiles.length;i++){System.out.println(this.onlyFiles[i].getName());}}
Coloquei apenas os métodos relevantes.
Pra facilitar, caso seja necessário, posso explicar o código
Paz
brunoneiva
E em anexo, esta a classe na integra.
davidbuzatto
Vc quer listar os arquivos do diretório no painel abaixo? Cria outra Jtree e popula ela somente com os arquivos não diretórios e voi-lá!
brunoneiva
Eu faço isso no metodo que trata o evento né?
brunoneiva
E ai pessoal, tou aperriado com isso :?
Realmente, nao havia pensado em fazer outra arvore no outro painel. Fiz aqui mas nao parece nada no painel, modifiquei o método que trata o evento. Olha só:
publicvoidvalueChanged(TreeSelectionEvente){DefaultMutableTreeNodenode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();if(node==null)return;FilefileChild=(File)node.getUserObject();//aqui é a parte em que ele deveria "contruir" o painel de baixo. this.treeFiles=this.buildTreeFiles(node,fileChild);this.treeFiles.setRootVisible(true);this.treeFiles.setVisible(true);this.panelFiles.add(this.treeFiles);}privateJTreebuildTreeFiles(DefaultMutableTreeNodenode,Filedir){intcont=0;JTreetree=newJTree(node);File[]filesAndDir;File[]onlyFiles;//armazena em filesAndDir todos os arquivos e diretorios contidos em dirfilesAndDir=dir.listFiles();//conta tão somente quantos arquivos contém em filesAndDirfor(inti=0;i<filesAndDir.length;i++)if(filesAndDir[i].isFile())cont++;//um array somente com os arquivos contido na pasta dironlyFiles=newFile[cont];for(inti=0;i<onlyFiles.length;i++){if(onlyFiles[i].isDirectory()){}else{DefaultMutableTreeNodechild=newDefaultMutableTreeNode(onlyFiles[i]);node.add(child);}}returntree;}}
[]'s
brunoneiva
Na verdade, estava testando agora, tá rolando uma java.lang.NullPointerException no método buildTreeFiles, na linha:
if(filesAndDir[i].isFile())
Acho que o problema está porque não posso contruir esta arvore onde se trata o evento da arvore de cima (a de diretorios), mas realmente não sei outra forma de faze-lo já que na arvore de baixo listo apenas os arquivos da arvore selecionada.