eclipse 對話框

導讀:

  3.4.1 信息提示框

  信息提示框對應的類爲org.eclipse.jface.dialogs.MessageDialog,它定義瞭如下主要方法。

  (1) 確認對話框(如圖3.4所示):

  public static boolean openConfirm(Shell parent, String title, String message)

  圖3.4 確認對話框

  (2) 錯誤信息框:

  public static void openError(Shell parent, String title, String message)

  (3) 普通消息框:

  public static void openInformation(Shell parent, String title, String message)

  (4) 詢問對話框(如圖3.5所示):

  public static boolean openQuestion(Shell parent, String title, String message)

  圖3.5 詢問對話框

  注意詢問對話框與確認對話框方法的區別。

  (5) 警告對話框:

  public static void openWarning(Shell parent, String title, String message)

  3.4.2 值輸入對話框

  在和用戶交互的時候,對於一些複雜的信息,可能需要通過自定義的對話框進行採集,而對於像簡單的字符串之類的信息,則可以通過彈出值輸入對話框的方式進行採集。

  值輸入對話框定義在org.eclipse.jface.dialogs.InputDialog中,與消息對話框不同,這個類是必須實例化才能使用的,其構造函數爲:

  public InputDialog(Shell parentShell, String dialogTitle,

  String dialogMessage, String initialValue, IInputValidator validator)

  參數dialogTitle爲標題,dialogMessage爲顯示的消息,initialValue爲對話框中的初始值,validator爲值校驗器。當validator爲null的時候,不對對話框中的值做校驗,而非null的時候需要做校驗。

  IInputValidator接口定義如下:

  public interface IInputValidator {

  public String isValid(String newText);

  }

  當isValid返回非空的時候,值校驗不通過,並且把isValid返回的值作爲錯誤信息顯示。

  使用值輸入對話框的例子如下:

  InputDialog inputDlg = new InputDialog(shell,"輸入","請輸入您的年齡","20",

  new IInputValidator(){

  public String isValid(String newText)

  {

  int i;

  try

  {

  i= Integer.parseInt(newText);

  } catch (NumberFormatException e)

  {

  return"年齡必須爲整數!";

  }

  

  if(i<0)

  {

  return"兄弟來自反物質世界?年齡不可能爲負吧!";

  }

  

  if(i>150)

  {

  return"您也太高壽了吧!";

  }

  

  return null;

  }

  });

  

  if(inputDlg.open()==Window.OK)

  {

  System.out.println(inputDlg.getValue());

  }

  運行以後當在對話框中輸入“-20”的時候就會提示錯誤,如圖3.6所示。

  圖3.6 輸入對話框

  3.4.3 錯誤對話框

  錯誤對話框定義在org.eclipse.jface.dialogs.ErrorDialog中,它有兩個重載的openError靜態方法,與其他對話框不同的是有一個IStatus status參數,這個參數用來設置錯誤信息,一般我們使用它的一個實現類org.eclipse.core.runtime. Status,Status中定義了兩個靜態常量OK_STATUS、CANCEL_STATUS,我們可以使用它們,如果它們不能滿足要求,就要調用Status的構造函數進行實例化,其構造函數如下:

  public Status(int severity, String pluginId, int code, String message, Throwable exception)

  l severity表示錯誤的程度,可取值爲OK、ERROR、INFO、WARNING、CANCEL。

  l pluginId爲調用插件的插件id,一般定義在對應插件的Activator中。

  l code爲錯誤代碼。

  l message爲錯誤消息。

  l exception爲要拋出的異常。

  顯示效果如圖3.7所示。

  圖3.7 錯誤對話框

  3.4.4 顏色選擇對話框

  顏色選擇對話框定義在org.eclipse.swt.widgets.ColorDialog中,其調用方法與普通對話框沒有什麼不同。例如:

  ColorDialog colorDlg = new ColorDialog(shell);

  RGB rgb = colorDlg.open();

  if(rgb!=null)

  {

  Color color = null;

  try

  {

  color= new Color(shell.getDisplay(),rgb);

  //使用color...

  }

  finally

  {

  if(color!=null)

  color.dispose();

  }

  }

  這裏得到返回值的方式非常值得研究,對話框並沒有直接返回Color,而是返回一個RGB對象的實例,由調用者來根據RGB構造Color,這正好符合了SWT中資源管理的一個原則:“誰創建誰銷燬”。如果ColorDialog返回值是Color類型,那麼必須由ColorDialog負責銷燬,可是ColorDialog不知道什麼時候去銷燬,所以ColorDialog就返回了一個由JVM去負責銷燬的對象RGB,此對象包含了需要的信息,由調用者去構造,類似的用法在下面的字體對話框中也可以看到。

  ColorDialog 還有一個setRGB方法可以用來給顏色對話框設置初始值。

  3.4.5 字體對話框

  字體對話框定義在org.eclipse.swt.widgets.FontDialog中,調用方法如下:

  FontDialog fontDlg = new FontDialog(shell);

  FontData fontData = fontDlg.open();

  if(fontData!=null)

  {

  Font font = null;

  try

  {

  font= new Font(shell.getDisplay(),fontData);

  //使用font...

  }

  finally

  {

  if(font!=null)

  font.dispose();

  }

  }

  和顏色對話框類似,字體對話框返回的字體信息是保存在由JVM負責資源回收的FontData對象中的,由調用者來根據FontData對象構造字體對象。FontDialog有一個setFontList方法可以用來設置初始值。

  3.4.6 目錄選擇對話框

  目錄選擇對話框定義在org.eclipse.swt.widgets.DirectoryDialog中,調用方法如下:

  DirectoryDialog dirDlg= new DirectoryDialog(shell);

  String dir = dirDlg.open();

  if(dir!=null)

  {

  System.out.println(dir);

  }

  DirectoryDialog中定義瞭如下幾個方法。

  l setText:爲對話框設置窗口標題。

  l setMessage:爲對話框設置提示信息。

  l setFilterPath:爲對話框設置初始路徑。

  下面的代碼執行以後的效果如圖3.8所示。

  DirectoryDialog dirDlg = new DirectoryDialog(shell);

  dirDlg.setText("這裏是Text");

  dirDlg.setMessage("這裏是Message");

  dirDlg.setFilterPath("c:/Downloads");

  String dir = dirDlg.open();

  

  

  圖3.8 目錄選擇對話框

  3.4.7 文件選擇對話框

  與.Net、Delphi、VB等框架中的文件對話框不同,SWT中的保存對話框和打開對話框都定義在org.eclipse.swt.widgets.FileDialog類中,只要在構造函數中指定不同的風格即可。

  打開對話框:

  FileDialog fileDlg = new FileDialog(shell,SWT.OPEN);

  保存對話框:

  FileDialog fileDlg = new FileDialog(shell,SWT.SAVE);

  FileDialog中定義瞭如下幾個方法。

  l setFileName:設定初始文件名。

  l setFilterExtensions:設定文件名過濾器。

  l setFilterPath:設定初始路徑。

  l setText:設定對話框標題。

  l getFileNames:以數組形式返回選中的多個文件名。

  l getFilterPath:返回選中的路徑。

  調用例子:

  FileDialog fileDlg = new FileDialog(shell,SWT.OPEN|SWT.MULTI);

  fileDlg.setFilterExtensions(new String[]{"*.mp3","*.wmv","*.rm"});

  fileDlg.setFilterPath("F:/資料/My Music");

  fileDlg.setText("請選擇要打開的音樂文件(支持多選)");

  String filePath = fileDlg.open();

  if(filePath!=null)

  {

  System.out.println("路徑:"+fileDlg.getFilterPath());

  String[] files = fileDlg.getFileNames();

  for(int i=0,n=files.length;i
  {

  System.out.println(files[i]);

  }

  }

  3.4.8 自定義對話框及配置保存與加載

  程序中經常會需要一些自定義對話框,我們可以從SWT的Dialog類(位於包org.eclipse. swt.widgets中)派生,也可以從JFace的Dialog(位於包org.eclipse.jface.dialogs中)中派生。建議我們如果沒有特別的需要最好從JFace的Dialog繼承,因爲它提供了更多SWT對話框中沒有提供的功能。

  我們經常需要保存對話框中的值,並在下次打開的時候重新加載。可以自己通過讀寫配置文件方式完成此功能,不過Eclipse提供了更好的功能,那就是使用對話框配置服務。對話框值的保存與加載的核心類就是org.eclipse.jface.dialogs 包下的IDialogSettings,它可以用來保存和檢索與鍵名相關聯的基本數據類型和字符串值。

  每個插件都有自己的Activator,這些Activator的基類就是AbstractUIPlugin,我們可以通過AbstractUIPlugin的getDialogSettings方法來取得此插件對應的對話框配置服務,此服務並不是只有在對話框中才能調用,我們可以在插件代碼中的任何位置訪問對話框設置。取得服務的方式非常簡單:

  IDialogSettings settings = Activator.getDefault().getDialogSettings();

  配置中的值是使用 get 和 put 方法來存儲和檢索的,可以存儲和加載布爾、長型、雙精度、浮點、整型、數組和字符串值。以下代碼段說明可以如何使用對話框設置來初始化對話框中的控件值:

  protected Control createDialogArea(Composite parent) {

  IDialogSettings settings = Activator.getDefault().getDialogSettings();

  checkbox.setSelection(settings.getBoolean("isOpenWhenLoad"));

  }

  單擊【確定】按鈕時,就可以存儲設置值:

  protected void okPressed() {

  IDialogSettings settings = Activator.getDefault().getDialogSettings();

  settings.put("isOpenWhenLoad", checkbox.getSelection());



本文轉自

http://book.csdn.net/bookfiles/550/10055018419.shtml
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章