Почему я не могу дважды щелкнуть, чтобы выбрать файл с JFileChooser Java? - PullRequest
0 голосов
/ 25 мая 2019

У меня есть минимальное приложение Java Swing, чтобы показать проблему: когда я открыл JFileChooser и попытался дважды щелкнуть файл в правой колонке, он попытается переместиться в левую колонку, независимо от того, насколько быстро я удваиваюнажмите на него, он не будет выбран, пока он не окажется в левом столбце, это ошибка в Java Swing или я что-то не так делаю?Как это исправить?

enter image description here

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.filechooser.FileFilter;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class Demo_File_Chooser_Show_Txt_Only extends JFrame
{
  private JButton buttonBrowse;

  public Demo_File_Chooser_Show_Txt_Only()
  {
    super("Demo File Type Filter");
    setLayout(new FlowLayout());
    buttonBrowse=new JButton("Browse...");
    buttonBrowse.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { showOpenFileDialog(); } });
    getContentPane().add(buttonBrowse);
    setSize(300,100);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
  }

  public static void main(String[] args)
  {
    try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); }
    catch (Exception e) { }
    SwingUtilities.invokeLater(new Runnable() { public void run() { new Demo_File_Chooser_Show_Txt_Only(); } });
  }

  private void showOpenFileDialog()
  {
    JFileChooser fileChooser=new JFileChooser(".");
    fileChooser.setControlButtonsAreShown(false);
    fileChooser.setFileFilter(new FileFilter()
    {
      @Override
      public boolean accept(File file) { return file.getName().toLowerCase().endsWith(".txt"); }

      @Override
      public String getDescription() { return ".txt files"; }
    });
//    fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//    fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    fileChooser.showOpenDialog(null);
  }
}

1 Ответ

0 голосов
/ 25 мая 2019

Я добавил следующую строку.

fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

После добавления вышеуказанной строки вы сможете дважды щелкнуть мышью.

Просто чтобы проверить, я также добавил следующие строки для печати.

int someValue = fileChooser.showOpenDialog(null);
    if (someValue == JFileChooser.APPROVE_OPTION) {
      File selectedFile = fileChooser.getSelectedFile();
      System.out.println("Selected File : " + selectedFile.getAbsolutePath());
   }
...