Swing дерево из Open-диалога - Java

Узнай цену своей работы

Формулировка задачи:

Приветствую! Столкнулся с проблемой в программировании событий Java(eclipse) с пакетом Swing. Форма такая: Кнопка Open открывает диалог. В диалоге мы что-то выбрали. Нажимаем на кнопку refresh. ==> Если выбран файл, нужно вывести его полный путь в консоль. Если выбрана директория, то нужно вывести её в дерево (под кнопками). Кое-что я написал, но не получается дерево обновить:
Листинг программы
  1. import java.awt.EventQueue;
  2. import javax.swing.JFileChooser;
  3. import javax.swing.JFrame;
  4. import javax.swing.JButton;
  5. import javax.swing.JTree;
  6. import javax.swing.tree.DefaultMutableTreeNode;
  7. import java.awt.event.ActionListener;
  8. import java.awt.event.ActionEvent;
  9. import java.io.File;
  10. public class Frame1 {
  11. private JFrame frame;
  12. static String file = "";
  13. static String dir = "";
  14. static String message = "";
  15. /**
  16. * Launch the application.
  17. */
  18. public static void main(String[] args) {
  19. EventQueue.invokeLater(new Runnable() {
  20. public void run() {
  21. try {
  22. Frame1 window = new Frame1();
  23. window.frame.setVisible(true);
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. });
  29. }
  30. /**
  31. * getList
  32. */
  33. public void getList(DefaultMutableTreeNode node, File f) {
  34. if (!f.isDirectory()) {
  35. // Text
  36. if (f.getName().endsWith("txt")) {
  37. System.out.println("FILE - " + f.getName());
  38. DefaultMutableTreeNode child = new DefaultMutableTreeNode(f);
  39. node.add(child);
  40. }
  41. } else {
  42. System.out.println("DIRECTORY - " + f.getName());
  43. DefaultMutableTreeNode child = new DefaultMutableTreeNode(f);
  44. node.add(child);
  45. File fList[] = f.listFiles();
  46. for (int i = 0; i < fList.length; i++)
  47. getList(child, fList[i]);
  48. }
  49. }
  50. /**
  51. * Create the application.
  52. */
  53. public Frame1() {
  54. initialize();
  55. }
  56. /**
  57. * Initialize the contents of the frame.
  58. */
  59. private void initialize() {
  60. frame = new JFrame();
  61. frame.setResizable(false);
  62. frame.setBounds(100, 100, 450, 300);
  63. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  64. frame.getContentPane().setLayout(null);
  65. JButton btnNewButton = new JButton("Open");
  66. btnNewButton.addActionListener(new ActionListener() {
  67. public void actionPerformed(ActionEvent arg0) {
  68. // Open диалог
  69. JFileChooser chooser = new JFileChooser();
  70. chooser.setCurrentDirectory(new java.io.File("."));
  71. chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
  72. chooser.setAcceptAllFileFilterUsed(false);
  73. if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
  74. if (chooser.getSelectedFile().isFile()) {
  75. file = chooser.getSelectedFile().toString();
  76. System.out.println("file: "+file);
  77. }
  78. if (chooser.getSelectedFile().isDirectory()) {
  79. dir = chooser.getCurrentDirectory().toString();
  80. System.out.println("dir: "+dir);
  81. }
  82. } else {
  83. message = "No Selection";
  84. }
  85. }
  86. });
  87. btnNewButton.setBounds(10, 11, 89, 23);
  88. frame.getContentPane().add(btnNewButton);
  89. // На старте дерево пусто
  90. DefaultMutableTreeNode root = new DefaultMutableTreeNode("", true);
  91. JTree tree = new JTree(root);
  92. tree.setBounds(10, 45, 424, 215);
  93. frame.getContentPane().add(tree);
  94. JButton btnNewButton_1 = new JButton("Refresh");
  95. btnNewButton_1.addActionListener(new ActionListener() {
  96. public void actionPerformed(ActionEvent e) {
  97. /*??????????????????*/
  98. /*Дерево обновляется по нажатию кнопки Refresh*/
  99. if (dir != "") {
  100. DefaultMutableTreeNode root = new DefaultMutableTreeNode("root", true);
  101. getList(root, new File(dir));
  102. JTree tree = new JTree(root);
  103. tree.setBounds(105, 45, 319, 206);
  104. frame.getContentPane().add(tree);
  105. }
  106. /*??????????????????*/
  107. }
  108. });
  109. btnNewButton_1.setBounds(109, 11, 89, 23);
  110. frame.getContentPane().add(btnNewButton_1);
  111. }
  112. }

Решение задачи: «Swing дерево из Open-диалога»

textual
Листинг программы
  1. package app1;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.EventQueue;
  5. import javax.swing.JFileChooser;
  6. import javax.swing.JFrame;
  7. import javax.swing.JButton;
  8. import javax.swing.JTree;
  9. import javax.swing.tree.DefaultMutableTreeNode;
  10. import java.awt.event.ActionListener;
  11. import java.awt.event.ActionEvent;
  12. import java.io.File;
  13. import javax.swing.JScrollPane;
  14. import javax.swing.tree.DefaultTreeModel;
  15.  
  16. public class Frame1 extends JFrame {
  17.  
  18.     private DefaultMutableTreeNode root;
  19.     private DefaultTreeModel model;
  20.  
  21.     public static void main(String[] args) {
  22.         EventQueue.invokeLater(new Runnable() {
  23.             public void run() {
  24.                 try {
  25.                     new Frame1();
  26.                 } catch (Exception e) {
  27.                     e.printStackTrace();
  28.                 }
  29.             }
  30.         });
  31.     }
  32.     private JTree tree;
  33.  
  34.     public Frame1() {
  35.         initialize();
  36.     }
  37.  
  38.     private void initialize() {
  39.         setBounds(100, 100, 450, 300);
  40.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  41.         setLayout(new BorderLayout());
  42.         root = new DefaultMutableTreeNode("Root");
  43.         model = new DefaultTreeModel(root);
  44.         JButton btnOpen = new JButton("Open");
  45.  
  46.         btnOpen.addActionListener(new ActionListener() {
  47.             public void actionPerformed(ActionEvent arg0) {
  48.                 JFileChooser chooser = new JFileChooser();
  49.                 chooser.setCurrentDirectory(new java.io.File("."));
  50.                 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
  51.                 chooser.setAcceptAllFileFilterUsed(false);
  52.  
  53.                 if (chooser.showOpenDialog(Frame1.this) == JFileChooser.APPROVE_OPTION) {
  54.                     File selectedFile = chooser.getSelectedFile();
  55.                     if (selectedFile.isFile()) {
  56.                         root = new DefaultMutableTreeNode(selectedFile.toString());
  57.                         System.out.println(selectedFile.toString());
  58.                     } else {
  59.                         if (selectedFile.isDirectory()) {
  60.                             root = new DefaultMutableTreeNode(selectedFile.getName());
  61.                             String[] directories = selectedFile.list();
  62.                             for (String d : directories) {
  63.                                 root.add(new DefaultMutableTreeNode(d));
  64.                             }
  65.                         }
  66.                     }
  67.                     model.setRoot(root);
  68.                 }
  69.             }
  70.         });
  71.  
  72.         add(btnOpen, BorderLayout.SOUTH);
  73.         tree = new JTree();
  74.         tree.setModel(model);
  75.         JScrollPane scrollPane = new JScrollPane(tree);
  76.         add(scrollPane, BorderLayout.CENTER);
  77.         setVisible(true);
  78.     }
  79. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут