2013-10-02 62 views
0

我正在構建一個圖形用戶界面,並使用FileChooser來接收用戶選擇的文件,所以一切工作正常,但現在我試圖獲取所選文件的路徑很容易通過file.getAbsolutePath())。從選擇監聽器中獲取數據java

但不知何故,我不能把它弄出來之類的...我想在與聽者類的字符串路徑,它看起來像這樣:

private void browseButton(Canvas BasicSelection) 
{ 
    final Button btnBrowse = new Button(BasicSelection, SWT.NONE); 
    btnBrowse.setBounds(70, 29, 68, 23); 
    btnBrowse.setText("Browse"); 
    btnBrowse.addSelectionListener(new SelectionAdapter() 
    { 
     public void widgetSelected(SelectionEvent arg0) 
     { 
      filechooser.createAndShowGUI(path); 
      sbtnBrowse = btnBrowse.getSelection(); 
     } 
    }); 
    launchEvent(); 
} 

這裏是行動當按鈕被點擊時執行:

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

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

    //Process the results. 
    if (returnVal == JFileChooser.APPROVE_OPTION) 
    { 
     File file = fc.getSelectedFile(); 
     setPath(file); 
     log.append("Attaching file: " + file.getName() + "." + newline); 
     // Here is where i would need to get the file... but how ? 
    } 
    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); 
} 

如何從類中獲取文件名?

編輯:我已經嘗試與getters和setters,但奇怪的是,他試圖訪問內容之前,我真的寫在它。

String path ; 
/* 
Rest of the code ... 
*/ 
public void setPath(File input) 
{ 
    if (input != null) 
    { 
     this.path = input.getAbsolutePath(); 
     System.out.println("path is now set correctly : "); 
    } 
} 
public String getPath() 
{ 
    return this.path; 
} 
+0

如果可能的話,儘量*不*混合SWT和Swing,有一個['FileDialog'(HTTP:在你可以使用的SWT中使用.help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fswt%2Fwidgets%2FFileDialog.html)。對你的問題:創建getter和setter方法或使用'static''字符串變量來存儲路徑... – Baz

+0

@Baz所以你的意思是我應該使用FileDialog **而不是** JFilechooser,對吧? 是的,我試過使用getter和setter,我沒有在我的類中放入一個String路徑,但問題是,當我試圖從外部訪問它時,路徑爲空(他想要在訪問之前選擇路徑文件)。我不知道如何解決這個問題。 – trolologuy

+0

發佈一個答案 – Baz

回答

2

這是一個非常簡單的例子,應該做的正是你所要求的東西:

public static void main(String[] args) 
{ 
    Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setLayout(new FillLayout()); 

    Button button = new Button(shell, SWT.PUSH); 
    button.setText("Select file"); 

    button.addListener(SWT.Selection, new Listener() 
    { 
     @Override 
     public void handleEvent(Event arg0) 
     { 
      /* Create the dialog */ 
      FileDialog dialog = new FileDialog(shell, SWT.OPEN); 

      /* Open it. The absolute path of the selected file will be saved in the String variable */ 
      String selection = dialog.open(); 

      /* If the user selected something, print it */ 
      if(selection != null) 
       System.out.println(selection); 
     } 
    }); 

    shell.pack(); 
    shell.open(); 
    while (!shell.isDisposed()) 
    { 
     if (!display.readAndDispatch()) 
     { 
      display.sleep(); 
     } 
    } 
    display.dispose(); 
} 
+0

噢耶謝謝!這幾乎是我所需要的一切,但是我怎樣才能獲得絕對路徑,現在我不再使用文件類型了? 我沒有找到我想要的[這裏](http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse% 2Fswt%2Fwidgets%2FFileDialog.html)。 – trolologuy

+0

@trolologuy變量'selection'包含絕對路徑。 – Baz

1

請在JFileChooser本身同樣的事情不會 - 聲明一個實例變量private String fileChosen(類內,外的任何方法)中,用所獲得的路徑設置,並調用這個類的方法,以獲得它( getSelectedFile()這是爲JFileChooser)。

+0

是的,我已經在嘗試這樣做: '公共無效的setpath(文件輸入) { \t如果(!輸入= NULL) \t { \t \t this.path = input.getAbsolutePath(); System.out.println(「路徑現在設置正確:」); \t} } public String getPath() { \t \t return this.path; }' 但問題是,當我嘗試從外部訪問它時,他試圖在我實際寫入之前訪問它。 – trolologuy