2012-11-13 111 views
0

我需要打開FileDialog以使用Java 7在Windows 7 Home上使用SWT打開文件。當BrowseBtn1按鈕(SWT)被按下時,我需要打開此FileDialog。我爲此使用addSelectionListener。這是正確的方法嗎?如果是,爲什麼我的對話框在不符合任何運行時錯誤時不會打開。我根本不使用AWT,只使用SWT。SWT FileDialog打開問題

import org.eclipse.swt.*; 
import org.eclipse.swt.widgets.*; 
import org.eclipse.swt.widgets.FileDialog; 
import org.eclipse.swt.events.*; 
import org.eclipse.swt.graphics.FontData; 
import org.eclipse.swt.layout.*; 

public class MySwtApp { 
    public static Display display; 
    public static Shell shell; 

    public static void main(String[] args) { 

     display = new Display(); 
     shell = new Shell (display); 
     shell.setText("MY TITLE"); 
     GridLayout gridLayout = new GridLayout (3, false); 
     shell.setLayout (gridLayout); 

     Label Label1 = new Label (shell, SWT.NONE); 
     Label1.setText ("Select Message "); 
     GridData data = new GridData (200, SWT.DEFAULT); 
     Label1.setLayoutData (data); 

     Combo Combo1 = new Combo (shell, SWT.NONE); 
     Combo1.setItems (new String [] {"Option A", 
       "Option B"}); 
     // CaseStudyCombo.setText ("CaseStudyCombo"); 
     data = new GridData (200, SWT.DEFAULT); 
     Combo1.setLayoutData (data); 
     Combo1.addListener (SWT.DefaultSelection, new Listener() { 
      public void handleEvent (Event e) { 
       System.out.println (e.widget + " - Default Selection"); 
      } 
     }); 

     Label emptyLabel = new Label (shell, SWT.NONE); 
     emptyLabel.setText (""); 
     data = new GridData (50, SWT.DEFAULT); 
     emptyLabel.setLayoutData (data); 

     Label Label2 = new Label (shell, SWT.NONE); 
     Label2.setText ("Next Message: "); 
     data = new GridData (200, SWT.DEFAULT); 
     Label2.setLayoutData (data); 

     final Text text4 = new Text (shell, SWT.BORDER); 
     text4.setText (""); 
     data = new GridData (215, SWT.DEFAULT); 
     text4.setLayoutData (data); 

     Button BrowseBtn1 = new Button (shell, SWT.PUSH); 
     BrowseBtn1.setText ("Browse"); 
     data = new GridData (80, SWT.DEFAULT); 
     BrowseBtn1.setLayoutData (data); 
     BrowseBtn1.addSelectionListener(new SelectionAdapter() { 
      String result = ""; 
      public void WidgetSelected(SelectionEvent e) { 
       FileDialog dialog = new FileDialog (shell, SWT.OPEN); 
       dialog.setFilterExtensions(new String [] {"*.html"}); 
       //dialog.setFilterPath("c:\\temp"); 
       result = dialog.open(); 
       text4.setText(result); 
      } 
     }); 

     Label Label3 = new Label (shell, SWT.NONE); 
     Label3.setText ("Message Label 3: "); 
     data = new GridData (200, SWT.DEFAULT); 
     Label3.setLayoutData (data); 

     Text text5 = new Text (shell, SWT.BORDER); 
     text5.setText (""); 
     data = new GridData (215, SWT.DEFAULT); 
     text5.setLayoutData (data); 

     Button BrowseBtn2 = new Button (shell, SWT.PUSH); 
     BrowseBtn2.setText ("Browse"); 
     data = new GridData (80, SWT.DEFAULT); 
     BrowseBtn2.setLayoutData (data); 

     Label Label4 = new Label (shell, SWT.NONE); 
     Label4.setText ("Message Label 4: "); 
     data = new GridData (200, SWT.DEFAULT); 
     Label4.setLayoutData (data); 

     Combo Combo2 = new Combo (shell, SWT.NONE); 
     Combo2.setText ("Options"); 
     data = new GridData (200, SWT.DEFAULT); 
     Combo2.setLayoutData (data); 

     Button searchBtn1 = new Button (shell, SWT.PUSH); 
     searchBtn1.setText ("Search"); 
     data = new GridData (80, SWT.DEFAULT); 
     searchBtn1.setLayoutData (data); 

     Combo Combo3 = new Combo (shell, SWT.NONE); 
     // CaseStudyCombo.setItems (new String [] {"Item 1", "Item 2", "Item 2"}); 
     Combo3.setText ("Options:"); 
     data = new GridData (200, SWT.DEFAULT); 
     Combo3.setLayoutData (data); 

     Combo Combo4 = new Combo (shell, SWT.NONE); 
     Combo4.setText ("Options:"); 
     data = new GridData (200, SWT.DEFAULT); 
     Combo4.setLayoutData (data); 

     Button showDetailsBtn = new Button (shell, SWT.PUSH); 
     showDetailsBtn.setText ("Show Details"); 
     data = new GridData (80, SWT.DEFAULT); 
     showDetailsBtn.setLayoutData (data); 

     shell.pack(); 
     shell.open(); 

     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     display.dispose(); 
    } 
} 

請幫忙解決這個問題。

+2

只是提示:請堅持[Java變量命名約定](http ://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html)。 – Baz

回答

3

問題的行是這樣的:

public void WidgetSelected(SelectionEvent e) 

注意大寫的 'W'。你現在正在做的是定義一個新的方法(而不是覆蓋現有的widgetSelected(...)方法)在這個匿名類。如果更改此爲小寫字母「W」這樣的,它的工作:

public void widgetSelected(SelectionEvent e) 

這是一個良好的初步實踐(實際上超過推薦)使用@Override註釋。如果你使用過,編譯器會給你一個錯誤標誌(例如參考Joshua Bloch Effective Java第2版第36項:一致使用Override註釋)

+1

+1,用於在所有這些大寫變量中找出它。 – Baz