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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д