2016-04-14 15 views
1

私はこのスイングコンポーネントJfileChooserを扱っています。私は複数のファイルを選択して、OKをクリックしました。 その後、私は再びファイルを選択するために開いている場合は、私が望んでいない以前に選択したファイルを表示しています。 私は前のディレクトリが維持されるが、前のファイルは残さないようにしたい。jfilechooserでマルチファイル選択ダイアログボックスを開いた後、ファイルが選択されたファイルを表示しています

ここに、私が書いたコードスニペットがあります。

JFileChooser fileopen = new JFileChooser(); 
     private void fileButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileButtonActionPerformed 
      fileopen.setMultiSelectionEnabled(true); 
      int ret = fileopen.showDialog(null, "Open file"); 
      if (ret == JFileChooser.APPROVE_OPTION) { 
       File[] file = fileopen.getSelectedFiles(); 
       fileText.setText(file[0].getAbsolutePath()); 
       for(int i =1;i < file.length;i++) 
       { 
        fileText.append("||");  
        fileText.append(file[i].getAbsolutePath()); 
       } 
      }else { 
       log.info("File access cancelled by user."); 
     }  

    }//GEN-LAST:event_fileButtonActionPerformed 

私はそれらのsetcurrentdirecotoryとすべてを試しました。どんな助けもありがとう。

+0

だあなたは私にあなたがsetcurrentdirectoryで試してみましたどのようなコードを表示することができますか? – Assen

+0

ファイルcurrentDirectory = fileopen.getCurrentDirectory(); \t fileopen.setSelectedFile(新しいファイル( "")); \t fileopen.setCurrentDirectory(currentDirectory); –

+0

すぐに役立つように、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –

答えて

1

どちらか私はsetSelectedFilesetSelectedFiles方法で簡単に見ていた、あなたがそれを必要とするか、setSelectedFilesを呼び出し、それがnull

だから

を更新渡すたびに JFileChooserの新しいインスタンスを作成し、それらをクリアする必要があります選択と「ファイル名」フィールドはMac OS上で動作しているようには見えないので、ルック・アンド・フィールの問題になりそうです。

私がする傾向があるのはチートです。私は最後のディレクトリの値をPreferences APIに保存しています。これは非常に簡単なので実行します。あなたは死刑執行を渡ってそれを保持したくない場合は、あなたがMapまたはPropertiesまたはいくつかの他の変数を使用することができ、それはあなた次第

public class TestPane extends JPanel { 

    public TestPane() { 
     setLayout(new GridBagLayout()); 
     JButton btn = new JButton("..."); 
     add(btn); 
     btn.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       JFileChooser fileopen = new JFileChooser(); 
       String path = Preferences.userNodeForPackage(TestPane.class).get("FileAccess.lastSelectedDirectory", null); 
       if (path != null) { 
        File filePath = new File(path); 
        if (filePath.exists() && filePath.isDirectory()) { 
         fileopen.setCurrentDirectory(filePath); 
        } 
       } 
       fileopen.setMultiSelectionEnabled(true); 
       int ret = fileopen.showDialog(null, "Open file"); 
       if (ret == JFileChooser.APPROVE_OPTION) { 
        File[] file = fileopen.getSelectedFiles(); 
        System.out.println("You selected " + file.length + " files"); 
        Preferences.userNodeForPackage(TestPane.class).put("FileAccess.lastSelectedDirectory", fileopen.getCurrentDirectory().getAbsolutePath()); 
       } else { 
        System.out.println("File access cancelled by user."); 
       } 
      } 
     }); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(200, 200); 
    } 

} 
+0

ファイルチェッカーを開いて、「デフォルトのディレクトリ」から別のドライブ(通常は)のサブディレクトリ構造に移動する必要があることを発見すると、本当に苛立ちます。ファイルを開く(または保存する)!ユーザの好きなところで、 'setSelectedFiles'オプションを '新しいチューザを作成する'よりも利用してください。 '' –

+0

nope setSelectedfilesが動作しません。私はfileopen.setSelectedFile(null)を試しました。 –

+0

@AndrewThompson私は通常、 'Preferences'のようなものに最後のディレクトリを置き、diaogを開く前にリセットします – MadProgrammer