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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章