作者:梁祺 (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()));
????????}
Code Formatted by ToGoTutor
接下来是使用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);
????????}
Code Formatted by ToGoTutor
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());
????????}
????}
Code Formatted by ToGoTutor
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());
????????}
????}
Code Formatted by ToGoTutor
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 ????????}
????}
Code Formatted by ToGoTutor
这里我们介绍了一些需要调用操作系统功能的对话框,这些对话框在不同操作系统上外观和功能都很不相同, Eclipse SWT通过这些对话框类,为Eclipse应用程序提供统一编程接口。