Перенос пути файла из дерева файлов в другой класс - PullRequest
0 голосов
/ 26 февраля 2020

Это может быть немного запутанным, чтобы объяснить, но я буду стараться изо всех сил. У меня есть класс с именем FileBrowser, и есть строка String hello=fileNode.getFile, которая берет выбранный файловый узел из Jtree и сохраняет его в переменной hello. Полный класс приведен ниже.

FileBrowser. java

import java.awt.BorderLayout;
import java.io.File;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

import org.apache.commons.io.FileUtils;

public class FileBrowser extends JPanel {

    public DefaultMutableTreeNode root;

    public DefaultTreeModel treeModel;

    public JTree tree;


    public FileBrowser() {
        //JFrame frame = new JFrame("File Browser");
        //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        File fileRoot = new File("C://");
        root = new DefaultMutableTreeNode(new FileNode(fileRoot));
        treeModel = new DefaultTreeModel(root);

        tree = new JTree(treeModel);

        tree.setShowsRootHandles(true);
        JScrollPane scrollPane = new JScrollPane(tree);

        tree.addTreeSelectionListener(new TreeSelectionListener() {
            public void valueChanged(TreeSelectionEvent event) {
                /* new */
                DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode)
                        tree.getLastSelectedPathComponent();
                FileNode fileNode = (FileNode)dmtn.getUserObject();
                File file = fileNode.getFile();

               //THIS THE STRING I WOULD LIKE TO TRANSFER TO VIEWER_NAVIGATOR
               String hello=file.toString();



                call(hello,dmtn);

            }
        });


       // frame.add(scrollPane);
        //frame.setLocationByPlatform(true);
        //frame.setSize(640, 480);
        //frame.setVisible(true);

        CreateChildNodes ccn = 
                new CreateChildNodes(fileRoot, root);
        new Thread(ccn).start();
    }


    private void call(String file, DefaultMutableTreeNode dmtn) {
        System.out.println("Exporting file and converting to HTML");
         String[] arguments = new String[] {file, dmtn+".html", "HTML"};
     OITSample.func(arguments);     
    }






    public class CreateChildNodes implements Runnable {

        private DefaultMutableTreeNode root;

        private File fileRoot;

        public CreateChildNodes(File fileRoot, 
                DefaultMutableTreeNode root) {
            this.fileRoot = fileRoot;
            this.root = root;
        }

        public void run() {
            createChildren(fileRoot, root);
        }

        private void createChildren(File fileRoot, 
                DefaultMutableTreeNode node) {
            File[] files = fileRoot.listFiles();
            if (files == null) return;

            for (File file : files) {
                DefaultMutableTreeNode childNode = 
                        new DefaultMutableTreeNode(new FileNode(file));
                node.add(childNode);
                if (file.isDirectory()) {
                    createChildren(file, childNode);
                }}}}

    public class FileNode {

        private File file;

        public FileNode(File file) {
            this.file = file;
        }

        public File getFile() {
            return file;
        }


        @Override
        public String toString() {
            String name = file.getName();
            if (name.equals("")) {
                return file.getAbsolutePath();
            } else {
                return name;
            }}}}

Я хотел бы принять строковую переменную, привет, и когда щелкает файловый узел, переменная отправляется в Класс Viewer_Navigator ниже, в область, которая принимает файл на панели редактирования. В частности, это область:

           File file = new File("the string hello from the other class should go in here");

Viewer_Navigator. java

public class Viewer_Navigator {


    private JFrame frame;
    public static void main(String[] args) {


        String defStartParams = "AdminStart.xml";

        String adminParams = parseXML(defStartParams);

        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Viewer_Navigator window = new Viewer_Navigator();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

    }

    private static String parseXML(String defStartParams) {
        // We're cheating for now
        String params = "sb_ContName='com.staorbase.service.SB_AdminSvc'";
        params += ";";

        return params;
    }

    /**
    * Create the application.
    */
    public Viewer_Navigator() {



        initialize();
    }

    /**
    * Initialize the contents of the frame.
    */
    private void initialize() {
        frame = new JFrame();
        frame.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
            }
        });
        frame.setBounds(100, 100, 840, 545);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);  //put the jframe on center of the screen -added


        JToolBar toolBar = new JToolBar();
        frame.getContentPane().add(toolBar, BorderLayout.NORTH);

        final JSplitPane splitPane = new JSplitPane();
        splitPane.setDividerLocation(0.8);
        splitPane.setResizeWeight(0.3);
        frame.getContentPane().add(splitPane, BorderLayout.CENTER);


        FileBrowser testing=new FileBrowser();


        final JEditorPane editorpane= new JEditorPane();
           final JScrollPane editorScrollPane = new JScrollPane(editorpane);
           editorScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        final JPanel panel2 = new JPanel(new BorderLayout());
            panel2.add(editorScrollPane);
           File file = new File("the string 'hello' from the other class should go in here");
           try {
            editorpane.setPage(file.toURI().toURL());
        } catch (MalformedURLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }


            JScrollPane jScrollPane=new JScrollPane();

            jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            jScrollPane.setViewportBorder(new LineBorder(Color.BLUE));
            jScrollPane.getViewport().add(testing.tree);


            final JPanel panel = new JPanel(new BorderLayout());
            panel.add(jScrollPane,BorderLayout.CENTER);


         splitPane.setLeftComponent(panel);
        splitPane.setRightComponent(panel2);
    }



}

Любые предложения о том, как мне go сделать это? Пожалуйста, дайте мне знать, если вам нужны какие-либо разъяснения.

Спасибо

...