第八天:那SWT提供了哪些对话框呢

作者:梁祺 (eclipsesbs@gmail.com)

来自:http://www.benisoft.net/day8/index.html


SWT提供了一系列对话框类,帮助我们调用哪些和操作系统密切相关的对话框,这些对话框有:

  • FileDialog:打开或保存文件。
  • DirectoryDialog:选取目录。
  • ColorDialog:选取颜色。
  • FontDialog:选取字体。
  • MessageBox:和MessageDialog类似。
  • PrintDialog:打印对话框,就不在这里介绍了。

这些对话框都是SWT直接调用操作系统的原生对话框,所以在不同操作系统下,它们的外观各不相同。这里例子是在Mac OSX下截取屏幕获得的,所以和Windows和Linux下的看起来不太一样。

FileDialog

FileDialog用于选择一个或多个文件打开,或者选择一个文件保存。这个对话框本身并不从事文件打开或保存的动作,只是帮助用户选择文件(包括它所在的目录),但是文件打开和保存在语义上略有差别,比如文件保存可能会提示用户是否需要覆盖一个在磁盘上已经存在的文件,所以文件打开和保存我们都会演示一下。首先是文件打开。

在创建FileDialog对象时,需要指定SWT.OPEN用于文件打开,如果需要打开多个文件,还需要指定SWT.MULTI。在打开对话框之前,还有一系列参数需要设置。

  • setFileName:如果打开的文件有缺省名字,可以调用这个方法设置缺省文件名来提示用户。
  • setFilterExtensions:设置用于过滤的文件后缀名,它需要和setFilterNames(...)对应。
  • setFilterIndex:如果缺省的用于文件过滤的后缀不是setFilterExtensions的第一个后缀名,可以设置这个参数修改。
  • setFilterNames:设置用于显示的文件过滤器名称,它需要和setFilterEtensions对应。
  • setFilterPath:设置缺省的文件路径。
  • setText:设置对话框标题。
接下来就可调用open()方法打开对话框,检查返回的文件名(用户选择的第一个文件)是不是null,如果使用了SWT.MULTI,需要使用getFileNames()方法获得用户选择的所有文件。
        FileDialog dialog =  new FileDialog(window.getShell(), SWT.OPEN
                | SWT.MULTI);
        dialog.setFileName( "file.png");
        dialog.setFilterExtensions( new String[] {  "html""png""*" });
        dialog.setFilterIndex(1);
        dialog.setFilterNames( new String[] {  "HTML Files (*.html)",
                 "PNG Files (*.png)""All Files (*.*)" });
        dialog.setFilterPath( "/Users/liangi/Documents/site");
        dialog.setText( "Open PNG File");
        String files = dialog.open();
         if (files !=  null) {
            MessageDialog.openInformation(window.getShell(),  "Day8",
                    Arrays.toString(dialog.getFileNames()));
        }

接下来是使用FileDialog选择文件用于保存。这和使用FileDialog选择文件用于打开非常类似,首先把SWT.OPEN改为SWT.SAVE,其次设置setOverwrite(true)以便提示用户是否需要覆盖已存在磁盘上的文件。

        dialog =  new FileDialog(window.getShell(), SWT.SAVE);
        dialog.setFileName( "file.png");
        dialog.setFilterExtensions( new String[] {  "html""png""*" });
        dialog.setFilterIndex(1);
        dialog.setFilterNames( new String[] {  "HTML Files (*.html)",
                 "PNG Files (*.png)""All Files (*.*)" });
        dialog.setFilterPath( "/Users/liangi/Documents/site");
        dialog.setText( "Save File");
        files = dialog.open();
         if (files !=  null) {
            MessageDialog.openInformation(window.getShell(),  "Day8",
                    files);
        }
ColorDialog

ColorDialog的使用非常简单。创建ColorDialog对象,然后调用ColorDialog.open()方法,该方法会返回用户所选择的颜色的RGB值。

     public void run(IAction action) {
        ColorDialog dialog =  new ColorDialog(window.getShell());
        RGB rgb = dialog.open();
         if (rgb !=  null) {
            MessageDialog.openInformation(window.getShell(), \ "Day8\",
                    rgb.toString());
        }
    }
FontDialog

FontDialog的使用也很简单。创建FontDialog对象,然后调用FontDialog.open()方法,该方法会返回用户选择的字体的FontData对象。至于FontData,我们会和颜色,图片一起在GUI资源里介绍。

     public void run(IAction action) {
        FontDialog dialog =  new FontDialog(window.getShell());
        FontData fontData = dialog.open();
         if (fontData !=  null) {
            MessageDialog.openInformation(window.getShell(), \ "Day8\",
                    fontData.toString());
        }
    }
MessageBox

MessageBox和MessageDialog的功能类似,只不过MessageBox是由SWT提供的,MessageDialog由JFace提供。一般情况下,我们使用MessageDialog的机会更多一些。这里简单提一下,具体开发时还是推荐使用MessageDialog。

     public void run(IAction action) {
        MessageBox dialog =  new MessageBox(window.getShell(), SWT.OK
                | SWT.CANCEL | SWT.ICON_INFORMATION | SWT.APPLICATION_MODAL);
        dialog.setMessage(\ "Hello from MessageBox.\");
         int result = dialog.open();
         if (SWT.OK == result) {
             // OK is pressed
        }
    }

这里我们介绍了一些需要调用操作系统功能的对话框,这些对话框在不同操作系统上外观和功能都很不相同,Eclipse SWT通过这些对话框类,为Eclipse应用程序提供统一编程接口。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值