Swing дерево из Open-диалога - Java
Формулировка задачи:
Приветствую!
Столкнулся с проблемой в программировании событий Java(eclipse) с пакетом Swing. Форма такая:
Кнопка Open открывает диалог.
В диалоге мы что-то выбрали.
Нажимаем на кнопку refresh.
==> Если выбран файл, нужно вывести его полный путь в консоль. Если выбрана директория, то нужно вывести её в дерево (под кнопками).
Кое-что я написал, но не получается дерево обновить:
import java.awt.EventQueue; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.io.File; public class Frame1 { private JFrame frame; static String file = ""; static String dir = ""; static String message = ""; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Frame1 window = new Frame1(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * getList */ public void getList(DefaultMutableTreeNode node, File f) { if (!f.isDirectory()) { // Text if (f.getName().endsWith("txt")) { System.out.println("FILE - " + f.getName()); DefaultMutableTreeNode child = new DefaultMutableTreeNode(f); node.add(child); } } else { System.out.println("DIRECTORY - " + f.getName()); DefaultMutableTreeNode child = new DefaultMutableTreeNode(f); node.add(child); File fList[] = f.listFiles(); for (int i = 0; i < fList.length; i++) getList(child, fList[i]); } } /** * Create the application. */ public Frame1() { initialize(); } /** * Initialize the contents of the frame. */ private void initialize() { frame = new JFrame(); frame.setResizable(false); frame.setBounds(100, 100, 450, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); JButton btnNewButton = new JButton("Open"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { // Open диалог JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new java.io.File(".")); chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); chooser.setAcceptAllFileFilterUsed(false); if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { if (chooser.getSelectedFile().isFile()) { file = chooser.getSelectedFile().toString(); System.out.println("file: "+file); } if (chooser.getSelectedFile().isDirectory()) { dir = chooser.getCurrentDirectory().toString(); System.out.println("dir: "+dir); } } else { message = "No Selection"; } } }); btnNewButton.setBounds(10, 11, 89, 23); frame.getContentPane().add(btnNewButton); // На старте дерево пусто DefaultMutableTreeNode root = new DefaultMutableTreeNode("", true); JTree tree = new JTree(root); tree.setBounds(10, 45, 424, 215); frame.getContentPane().add(tree); JButton btnNewButton_1 = new JButton("Refresh"); btnNewButton_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { /*??????????????????*/ /*Дерево обновляется по нажатию кнопки Refresh*/ if (dir != "") { DefaultMutableTreeNode root = new DefaultMutableTreeNode("root", true); getList(root, new File(dir)); JTree tree = new JTree(root); tree.setBounds(105, 45, 319, 206); frame.getContentPane().add(tree); } /*??????????????????*/ } }); btnNewButton_1.setBounds(109, 11, 89, 23); frame.getContentPane().add(btnNewButton_1); } }
Решение задачи: «Swing дерево из Open-диалога»
textual
Листинг программы
package app1; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.io.File; import javax.swing.JScrollPane; import javax.swing.tree.DefaultTreeModel; public class Frame1 extends JFrame { private DefaultMutableTreeNode root; private DefaultTreeModel model; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { new Frame1(); } catch (Exception e) { e.printStackTrace(); } } }); } private JTree tree; public Frame1() { initialize(); } private void initialize() { setBounds(100, 100, 450, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); root = new DefaultMutableTreeNode("Root"); model = new DefaultTreeModel(root); JButton btnOpen = new JButton("Open"); btnOpen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new java.io.File(".")); chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); chooser.setAcceptAllFileFilterUsed(false); if (chooser.showOpenDialog(Frame1.this) == JFileChooser.APPROVE_OPTION) { File selectedFile = chooser.getSelectedFile(); if (selectedFile.isFile()) { root = new DefaultMutableTreeNode(selectedFile.toString()); System.out.println(selectedFile.toString()); } else { if (selectedFile.isDirectory()) { root = new DefaultMutableTreeNode(selectedFile.getName()); String[] directories = selectedFile.list(); for (String d : directories) { root.add(new DefaultMutableTreeNode(d)); } } } model.setRoot(root); } } }); add(btnOpen, BorderLayout.SOUTH); tree = new JTree(); tree.setModel(model); JScrollPane scrollPane = new JScrollPane(tree); add(scrollPane, BorderLayout.CENTER); setVisible(true); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д