2010-04-19 110 views

回答

0

查看FileChooserDemo和FileChooserDemo2 here瞭解FileChooser的使用方法。

下面是代碼的相關摘錄:

public void actionPerformed(ActionEvent e) { 
    //Set up the file chooser. 
    if (fc == null) { 
     fc = new JFileChooser(); 

    //Add a custom file filter and disable the default 
    //(Accept All) file filter. 
     fc.addChoosableFileFilter(new ImageFilter()); 
     fc.setAcceptAllFileFilterUsed(false); 

    //Add custom icons for file types. 
     fc.setFileView(new ImageFileView()); 

    //Add the preview pane. 
     fc.setAccessory(new ImagePreview(fc)); 
    } 

    //Show it. 
    int returnVal = fc.showDialog(FileChooserDemo2.this, 
            "Attach"); 

    //Process the results. 
    if (returnVal == JFileChooser.APPROVE_OPTION) { 
     File file = fc.getSelectedFile(); 
     log.append("Attaching file: " + file.getName() 
        + "." + newline); 
    } else { 
     log.append("Attachment cancelled by user." + newline); 
    } 
    log.setCaretPosition(log.getDocument().getLength()); 

    //Reset the file chooser for the next time it's shown. 
    fc.setSelectedFile(null); 
} 
0

假設「A」級包含的代碼顯示文件選擇器和「B」類所需要的價值,下面會做你的需要。

class A { 
    private PropertyChangerSupport changer = new PropertyChangerSupport(this); 
    private File selectedFile = null; 

    public void addPropertyChangeListener(String property, PropertyChangeListener listener) { 
     changer.addPropertyChangeListener(property, listener); 
    } 

    public void removePropertyChangeListener(String property, PropertyChangeListener listener) { 
     changer.removePropertyChangeListener(property, listener); 
    } 

    public void actionPerformed(ActionEvent evt) { 
     // Prompt the user for the file 
     selectedFile = fc.getSelectedFile(); 
     changer.firePropertyChange(SELECTED_FILE_PROP, null, selectedFile); 
    } 
} 

class B { 
    public B(...) { 
     // ... 
     A a = ... 
     a.addPropertyChangeListener(new PropertyChangeListener() { 
      public void propertyChanged(PropertyChangeEvent evt) { 
       if (evt.getPropertyName().equals(A.SELECTED_FILE_PROP)) { 
        File selectedFile = (File)evt.getNewValue(); 
        // Do something with selectedFile 
       } 
      }}); 
    } 
} 
3

actionPerformed是在由事件分派線程調用​​時的一些事件(一個按鈕被點擊,例如),它不應該被直接調用。如果您想要一種顯示FileChooser並返回選定文件的方法,則聲明可以由eventHandler以及其他任何地方調用的另一種方法:

public void actionPerformed(ActionEvent e) { 
    File myFile = selectFile(); 
    doSomethingWith(myFile); 
} 

public File selectFile() { 
    int returnVal = fc.showDialog(FileChooserDemo2.this, 
            "Attach"); 
    //Process the results. 
    if (returnVal == JFileChooser.APPROVE_OPTION) { 
     return fc.getSelectedFile(); 
    } else { 
     return null; 
    } 
} 
相關問題