2012-10-04 5 views
7

ApacheのPDFBoxとPDFをマージする簡単なSwingアプリケーションについては、JFileChooserを使用して1つまたは複数のPDFファイルを選択し、JListに追加しています。 これまでのところ問題ありません。JListにファイルを追加した後にJFileChooserの選択を解除します

ボタンをクリックして別のファイル/ファイルをもう一度追加すると、以前の選択がJFileChooserに残っていることが気になるのですが、最初は空でなければなりません。

私はこれを試してみましたが、それは例外の作品もなくスローどちら:

pdfFileChooser.setAcceptAllFileFilterUsed(false); 
    pdfFileChooser.setMultiSelectionEnabled(true); 
    pdfFileChooser.setFileFilter(new FileFilter() { 

     @Override 
     public boolean accept(File arg0) { 
      return arg0.getName().endsWith(".pdf"); 
     } 
     @Override 
     public String getDescription() { 
      return "*.pdf"; 
     } 
    }); 

    JButton btnAddFile = new JButton("Add file"); 
    btnAddFile.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      if(pdfFileChooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) { 
      addFileToList(pdfFileChooser.getSelectedFiles()); 
      pdfFileChooser.setSelectedFile(null); 
      } 
     } 
    }); 

    private void addFileToList(File[] filesToAdd) { 
     if((filesToAdd != null) && (filesToAdd.length > 0)) { 
      DefaultListModel model = (DefaultListModel)listFiles.getModel(); 
      for(File file : filesToAdd) { 
      if(!model.contains(file)) { 
       model.addElement(file);     
      } 
      } 
     } 
    } 

どのように私はJFileChooserのから選択範囲を削除することができますので、ノーファイル/ファイル:ここで

pdfFileChooser.setSelectedFile(null); 

は、関連するコードです最初は選択されていますか?

答えて

9

これは、IMHO、 バグ です。

(バグは、APIがselectedFileメソッドにnullを渡した場合に起こることをAPIが示していないため、強力な言葉であるかもしれませんが、おそらくそれは不足している機能)

このような何かを試してみてください...

JFileChooser fc = new JFileChooser(); 
fc.showOpenDialog(null); 
File selected = fc.getSelectedFile(); 
System.out.println("You selected " + selected); 

File currentDirectory = fc.getCurrentDirectory(); 
// Hack alert 
fc.setSelectedFile(new File("")); 
fc.setCurrentDirectory(currentDirectory); 

fc.showOpenDialog(null); 
selected = fc.getSelectedFile(); 

System.out.println("You selected " + selected); 

基本的には、選択したファイルの変更は、依存UIのようだとSELECTED_FILE_CHANGED_PROPERTYプロパティ変更イベントに依存しています。何が起きているかは、選択したファイルのテキストフィールドを(特に)変更することについては、null参照を無視しているということです。

私はこの使用して金属とWindowsの外観を検査し、これが機能する

+2

+1現在の選択内容を消去する明示的な方法がない可能性があります。 nullを渡すことでうまくいくと思うかもしれませんが、APIは明らかにその動作を指定していません。私が見つけることができるところには、現在の選択肢をクリアすることについての言及はありません。 –

+2

@Jimは同意しました。 'setSelectedFile'メソッドに' null'を渡した場合に何が起きるかを示す文書はありません – MadProgrammer

+0

ニース、これはうまくいきます。ありがとうございます。 'File currentDirectory = fc.getCurrentDirectory(); //ハックアラート fc.setSelectedFile(新しいファイル( "")); fc.setCurrentDirectory(currentDirectory); ' – devrys

1

を感じる:

fileChooser.setSelectedFile(new File("")); 
fileChooser.setSelectedFiles(new File[]{new File("")}); 

しかし、あなたがより速く、代替をしたい場合、あなたはより多くの10Kファイル(以前のコードがあろうと選択した場合、多くの時間がかかる)。

fileChooser.setSelectedFile(new File("")); 
((FilePane) fileChooser.getComponents()[2]).clearSelection(); 
0

新しいJFileChooserインスタンスを作成し、最後に使用したディレクトリを渡すだけです。最後に使用されたディレクトリのデフォルトはhome dirです。有効なファイルを選択すると、そのファイルのディレクトリが保存され、次に新しいJFileChooserを開くときに使用されます。

関連する問題