java – 将文件添加到JList后清除JFileChooser选择

前端之家收集整理的这篇文章主要介绍了java – 将文件添加到JList后清除JFileChooser选择前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于用于将PDF与Apache PDFBox合并的简单Swing应用程序,我使用JFileChooser选择一个或多个PDF文件并将其添加到JList.
到目前为止没问题.

令我困扰的是,当我单击按钮再次添加另一个文件/文件时,之前的选择仍然存在于JFileChooser中,我不希望这样,选择应该最初为空.

我试过这个,但它既不起作用也不抛出异常:

  1. pdfFileChooser.setSelectedFile(null);

这是相关的代码

  1. pdfFileChooser.setAcceptAllFileFilterUsed(false);
  2. pdfFileChooser.setMultiSelectionEnabled(true);
  3. pdfFileChooser.setFileFilter(new FileFilter() {
  4.  
  5. @Override
  6. public boolean accept(File arg0) {
  7. return arg0.getName().endsWith(".pdf");
  8. }
  9. @Override
  10. public String getDescription() {
  11. return "*.pdf";
  12. }
  13. } );
  14.  
  15. JButton btnAddFile = new JButton("Add file");
  16. btnAddFile.addActionListener(new ActionListener() {
  17. public void actionPerformed(ActionEvent arg0) {
  18. if(pdfFileChooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) {
  19. addFileToList(pdfFileChooser.getSelectedFiles());
  20. pdfFileChooser.setSelectedFile(null);
  21. }
  22. }
  23. });
  24.  
  25. private void addFileToList(File[] filesToAdd) {
  26. if((filesToAdd != null) && (filesToAdd.length > 0)) {
  27. DefaultListModel model = (DefaultListModel)listFiles.getModel();
  28. for(File file : filesToAdd) {
  29. if(!model.contains(file)) {
  30. model.addElement(file);
  31. }
  32. }
  33. }
  34. }

如何从JFileChooser中删除选择,以便最初没有选择文件/文件

解决方法

这是,恕我直言,一个错误.

(正如已经明确指出的那样,“bug”可能是一个强有力的词,因为API没有说明如果将null传递给selectedFile方法会发生什么.相反,建议它是一个缺失的功能可能更合理)

尝试这样的事……

  1. JFileChooser fc = new JFileChooser();
  2. fc.showOpenDialog(null);
  3. File selected = fc.getSelectedFile();
  4. System.out.println("You selected " + selected);
  5.  
  6. File currentDirectory = fc.getCurrentDirectory();
  7. // Hack alert
  8. fc.setSelectedFile(new File(""));
  9. fc.setCurrentDirectory(currentDirectory);
  10.  
  11. fc.showOpenDialog(null);
  12. selected = fc.getSelectedFile();
  13.  
  14. System.out.println("You selected " + selected);

基本上,所选文件的更改似乎取决于UI,并依赖于SELECTED_FILE_CHANGED_PROPERTY属性更改事件.似乎发生的是,当涉及到更改(特别是)所选文件文本字段时,它忽略了空引用.

我使用Metal和Windows外观测试了这个

猜你在找的Java相关文章