代码之家  ›  专栏  ›  技术社区  ›  killuaZd

JFileChooser在其他actionevent中重用路径

  •  0
  • killuaZd  · 技术社区  · 2 年前

    我是Java的初学者,现在正在做一个Java项目。 我应该做的是:当我点击按钮1时,我选择了一个文件夹,我得到了这个文件夹的路径保存在变量fullpath中。

    在第二个动作中,当我点击按钮2时,我想创建一个新文件,其路径与我从第一个按钮获得的路径相同。

    我认为问题在于变量的完整路径。

    我知道这个问题不是很清楚,但我已经尽力了。

    谢谢各位。

    if (event.getSource() == Importer) { 
       JFileChooser chooser = new JFileChooser();
       chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
       int returnVal =chooser.showOpenDialog(this);
       if (returnVal == JFileChooser.APPROVE_OPTION)
       {
       String fullpath= chooser.getSelectedFile().getAbsolutePath();
       System.out.println(fullpath);
       }
         
     }
    
     if (event.getSource() == Valider) {    
    
        File path= new File(fullpath);
        File[] allFiles = path.listFiles();
     }
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   Hovercraft Full Of Eels    2 年前

    虽然您的代码可能还有其他未知问题,但一个明确的问题是作用域问题:您在代码的局部区域声明了一个变量,并且仅在该区域内可见,同时,您的程序需要该变量在程序内其他地方保存的信息。

    if (event.getSource() == Importer) { 
        JFileChooser chooser = new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int returnVal =chooser.showOpenDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
    
            // **** here ****  
            String fullpath = chooser.getSelectedFile().getAbsolutePath(); 
    
            System.out.println(fullpath);
        }
    }
    

    正如这样宣布的:

    String fullpath = chooser.getSelectedFile().getAbsolutePath();
    

    每爪哇 范围界定 规则 fullpath 变量在if块中可见,并且 只有 在if块内。如果需要在类中的其他位置使用它,则应将其声明为类的字段:

    public class MyClass {
        private String fullpath = "";
        private JButton someButton = new JButton("some button");
        
        public MyClass() {
            someButton.addActionListener(e -> {
                JFileChooser chooser = new JFileChooser();
                chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                int returnVal = chooser.showOpenDialog(this);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    // *** no, don't declare it here ***
                    // String fullpath = chooser.getSelectedFile().getAbsolutePath(); 
    
                    // *** rather *use* the class field here
                    fullpath = chooser.getSelectedFile().getAbsolutePath(); 
    
                    System.out.println(fullpath);
                }
            });
        }
    }
    

    现在 完整路径 变量 以及它可能包含的信息 ,在整个代码中都可见