2015-02-09 55 views
2

我有一個叫做「搜索」的按鈕,打開一個JFileChooser窗口。雙擊該窗口應該自動關閉的目錄後,無需點擊取消或任何其他按鈕。那可能嗎?JFileChooser事件

謝謝。

回答

2

您可以通過將PropertyChangeListener添加到JFileChooser來完成此操作。在propertyChange()方法內檢查屬性名稱是否爲JFileChooser.DIRECTORY_CHANGED_PROPERTY。如果是,只需調用JFileChooser.approveSelection()方法即可關閉文件選擇器對話框。

注意:由於選擇一個文件夾將自動關閉文件選擇器,在這種情況下,將文件選擇器(用戶)直接指向他/她可以選擇目標文件夾的文件夾很重要。爲此,使用JFileChooser的構造函數設置初始/當前文件夾(您可以將該文件夾作爲FileString傳遞),也可以通過調用JFileChooser.setCurrentDirectory()將其設置在構造函數之後。

下面是一個完整的例子:

JFrame f = new JFrame(); 
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

JButton b = new JButton("test"); 
b.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     JFileChooser fc = new JFileChooser(); 
     fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 

     fc.addPropertyChangeListener(new PropertyChangeListener() { 
      @Override 
      public void propertyChange(PropertyChangeEvent evt) { 
       if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(
         evt.getPropertyName())) { 
        System.out.println("DIRECTORY CHANGED"); 
        fc.approveSelection(); 
       } 
      } 
     }); 

     int result = fc.showOpenDialog(f); 
     if (result == JFileChooser.APPROVE_OPTION) { 
      System.out.println("Chosen folder: " + fc.getSelectedFile()); 
     } 
    } 
}); 
f.add(b); 

f.pack(); 
f.setLocationRelativeTo(null); 
f.setVisible(true);