对话框是软件系统中最常用到的界面,对话框无处不在,从界面结构来说,对话框主要是由主体的界面组件和底部窗体按钮组成.

之前的例子中已经频繁的使用到了MessageDialog.openInformation方法来弹出一个简单的对话框.MessageDialog只是Dialog中的一种.

在Dialog中还有很多其他的对话框可以使用.

信息提示框(MessageDialog类)中的常用方法

1.static void openInformation(Shell parent, java.lang.String title, String message)

例子:MessageDialog.openInformation(shell,"标题","提示信息"),它的三个参数都可以接受null值.

此方法仅仅用于提示信息.

2.static boolean openConfirm(Shell parent, java.lang.String title, String message)

例子:

boolean b = MessageDialog.openConfirm(shell,"标题","提示信息");

if(b)

  System.out.println("你单击了"确定"按钮);

else

  System.out.println("你单击了"取消"按钮);

3.static boolean openQuestion(Shell parent, java.lang.String title, String message)

使用方法和openConfirm一模一样,只是界面按钮变成了"是","否"

4. void openError(Shell parent,String title,String message)

例子:MessageDialog.openError(shell,"标题","提示信息");

错误提示框,界面上换成了明显的红叉图标.

5.void openWarning(Shell parent,String title,String message)

例子:MessageDialog.openWarning(shell,"标题","提示信息");

警告提示框,界面上换成了明显的警告图标.

如果仅提示很少的信息,则JFace的MessageDialog弹出的对话框显示的太大,SWT的MessageBox或许更好一些.两者相对比较而言,MessageBox可以自动调整对话框大小,但弹出一个对话框MessageBox要3句.而MessageDialog只需要一句.

1.MessageBox最简单的使用代码

MessageBox1.java

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell; public class MessageBox1 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
MessageBox messageBox = new MessageBox(shell);
messageBox.setMessage("Hello World!");
messageBox.open();
// -----------------END------------------------
// shell.layout();
// shell.open();
shell.dispose();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

2.MessageBox的式样和open方法返回值实例

MessageBox2.java

 import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell; public class MessageBox2 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
MessageBox msgbox = new MessageBox(shell, SWT.ICON_QUESTION | SWT.YES | SWT.NO);
msgbox.setMessage("确认删除吗?");
int rc = msgbox.open();
if (rc == SWT.YES)
System.out.println("您单击了“是”按钮");
if (rc == SWT.NO)
System.out.println("您单击了“否”按钮");
// -----------------END------------------------
// shell.layout();
// shell.open();
shell.dispose();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

运行结果:

代码中SWT.ICON_QUESTION式样用来在对话框上显示一个问号图标,它的其他式样的效果图下图.

另一种式样SWT.YES|SWT.NO则用来显示"是,否"按钮,它的组合方式还有很多.

颜色选择对话框(ColorDialog类)

SWT/JFace中设置颜色都需要用到Color类,如button.setBackground(Color color)是设置按钮背景色,而ColorDialog则可以弹出一个颜色选择对话框让用户选择颜色.

ColorDialog1.java

 import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell; public class ColorDialog1 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
ColorDialog dialog = new ColorDialog(shell);// 创建颜色选择对话框
RGB rgb = dialog.open();// 打开颜色选择对话框,并得到包含所选颜色的RGB值的对象
if (rgb != null) {// 根据rgb生成一个color对象
Color color = new Color(shell.getDisplay(), rgb);
// 使用颜色对象color ……。记得用完后调用color.dispose()将color释放掉
}
// -----------------END------------------------
// shell.layout();
// shell.open();
shell.dispose();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

运行结果:

字体选择对话框(FontDialog类)

FontDialog提供了字体选择对话框,它返回一个字体数据对象FontData,然后可以用FontData生成一个字体对象Font.使用FontDialog的实例如下:

FontDialog1.java

 import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FontDialog;
import org.eclipse.swt.widgets.Shell; public class FontDialog1 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
FontDialog dialog = new FontDialog(shell);
FontData fontData = dialog.open();
if (fontData != null) {
Font font = new Font(shell.getDisplay(), fontData);
// 使用字体对象font ……。记得用完后,调用font.dispose()将font释放掉
}
// -----------------END------------------------
// shell.layout();
// shell.open();
shell.dispose();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

运行结果:

打印设置对话框(PrintDialog类)

打印在软件系统中是必不可少的功能,在SWT/JFace中要用到打印类Printer,PrintDialog则提供了打印设置对话框,它可以返回一个打印数据对象PrinterData,然后根据PrinterData可以得到打印对象Printer.

PrintDialog1.java

 import org.eclipse.swt.printing.PrintDialog;
import org.eclipse.swt.printing.Printer;
import org.eclipse.swt.printing.PrinterData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell; public class PrintDialog1 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
PrintDialog dialog = new PrintDialog(shell);
PrinterData printerData = dialog.open();
if (printerData != null) {
Printer printer = new Printer(printerData);
// 使用printer对象 ……。记得用完后,调用printer.dispose()将printer释放掉
}
// -----------------END------------------------
// shell.layout();
// shell.open();
shell.dispose();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

运行结果:

目录选择对话框(DirectoryDialog类)

目录选择对话框,它提供了一个界面让用户选择目录,然后返回所选目录的路径(一个字符串),使用DirectoryDialog类的实例如下:

DirectoryDialog1.java

import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell; public class DirectoryDialog1 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
DirectoryDialog dialog = new DirectoryDialog(shell);
dialog.setText("目录"); // 设置窗口标题
dialog.setMessage("请选择一个目录:"); // 设置提示文字
dialog.setFilterPath("c:/windows"); // 设置初始目录
String dir = dialog.open(); // 打开对话框并返回一个包含所选目录路径的字符串
if (dir != null)
System.out.println(dir); // 打印出所选择目录的绝对路径
// -----------------END------------------------
// shell.layout();
// shell.open();
shell.dispose();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

运行结果:

文件选择对话框(FileDialog类)

文件选择对话框,提供一个界面让用户选择文件,然后返回所选文件爱你的全路径(路径+文件名).FileDialog还能设置文件选择的类型限制,也能选择多个文件.

一个最简单的实例:

FileDialog1.java

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell; public class FileDialog1 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
FileDialog dialog = new FileDialog(shell, SWT.OPEN);
dialog.setFilterPath("c:/windows"); // 设置初始路径
String fileName = dialog.open(); // 返回所选文件的全路径(路径+文件名)
// -----------------END------------------------
// shell.layout();
// shell.open();
shell.dispose();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

运行结果:

2.选择多个文件(SWT.MULTI式样)

FileDialog2.java

 import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell; public class FileDialog2 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
FileDialog dialog = new FileDialog(shell, SWT.OPEN | SWT.MULTI);// 加MULTI式样
String fileName = dialog.open(); // 返回最后一个选择文件的全路径
String[] fileNames = dialog.getFileNames(); // 返回所有选择文件的文件名,不包含路径
System.out.println(fileName == null ? "" : fileName);// 打印open方法的返回值
// 用一个循环将数组中的文件名加上路径打印出来
for (int i = 0; i < fileNames.length; i++)
System.out.println(dialog.getFilterPath() + "\\" + fileNames[i]);
// -----------------END------------------------
// shell.layout();
// shell.open();
shell.dispose();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

3.文件选择的限制类型(setFilterExtensions方法)

FileDialog3.java

 import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell; public class FileDialog3 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
FileDialog dialog = new FileDialog(shell, SWT.OPEN | SWT.MULTI);
dialog.setFilterNames(new String[] { "可执行文件 (*.exe)", "Microsoft Excel (*.xls)" });
dialog.setFilterExtensions(new String[] { "*.exe", "*.xls", "*.jpg", "*.*" });
String fileName = dialog.open();
System.out.println(fileName);
// -----------------END------------------------
// shell.layout();
// shell.open();
shell.dispose();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

程序说明:

setFilterExtensions设置文件选择的限制类型.

setFilterNames设置文件类型的说明文字,不要也可以.

setFilterExtensions参数的数组元素会和setFilterNames参数的数组元素依顺序相对应,像*.jpg类型本应该对 应setFilterNames中数组的第三个元素,但此数组只有两个元素,所以setFilterNames没有为*.jpg类型设置名称.则界面默认以类型*.jpg作为其名称.

4.保存对话框(SWT.SAVE式样)

保存对话框并不能提供实际保存文件的功能,它仅仅是弹出一个文件对话框,然后返回一个包含路径信息的字符串,具体文件的保存操作(指将文件信息写入磁盘)需要另外写程序去实现.保存对话框的实例如下:

FileDialog4.java

 import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell; public class FileDialog4 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
FileDialog dlg = new FileDialog(shell, SWT.SAVE);
String fileName = dlg.open();
if (fileName != null)
System.out.println(fileName);
// -----------------END------------------------
// shell.layout();
// shell.open();
shell.dispose();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

关于JFace中的对话框MessageDialog类等其它类型对话框的更多相关文章

  1. Java中的引用类型Scanner类和随机类型Random

    Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型.   引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. ...

  2. 为什么阿里巴巴开发手册中强制要求 POJO 类使用包装类型?NPE问题防范

    封面:学校内的秋天 背景:写这个的原因,也是我这两天凑巧看到的,虽然我一直有 alibaba Java 开发手册,也看过不少次,但是一直没有注意过这个问题 属于那种看过,但又没完全看过 一起来看看吧冲 ...

  3. 关于JFace中的进度条对话框(ProgressMonitorDialog类)

    在Windows操作系统中,最常用的进度条对话框就是文件复制时的弹出框,如果想让用户愉快的使用你开发 的软件,那么在执行某个较长时间的操作时候,就应该弹出一个进度条提示框,告诉用户程序正在做什么. 做 ...

  4. 关于JFace中的向导式对话框(WizardDialog类)

    向导式对话框是一种非常友好的界面,它能够引导用户一步步的输入信息.Eclipse的"新建项目",就是这样的向导式对话框. 在Eclipse中向导式对话框的开发是很简单的,它由Wiz ...

  5. 关于JFace的自定义对话框(Dialog类)

    仅仅是使用MessageDialog,InputDialog等JFace中现成的对话框类是无法满足实际项目开发需要的. 很多时候都需要自己定制对话框,自定义对话框只要在Dialog类的基础上作扩展就行 ...

  6. 回调函数中使用MFC类的成员或对话框控件的简单方法

    在MFC的很多程序中,常常需要在回调函数中调用MFC类的类成员变量.类成员函数,亦或者对话框控件的句柄.由于回调函数是基于C编程的Windows SDK的技术,而类成员又有this指针客观条件限制.. ...

  7. 关于JFace中的右键菜单Action类,ActgionGroup类,MenuManager类

    Action类,ActionGroup类,MenuManager类介绍 SWT中菜单是Menu类,在前面章节中已经介绍过Menu类的使用. 菜单项用MeauItem类来实现.但是在实际开发中,同一种功 ...

  8. 关于SWT中的表格(TableViewer类)

    JFace是SWT的扩展.它提供了一组功能强大的界面组件.其中包含表格,树,列表.对话框,向导对话框等. 表格是一种在软件系统中很常用的数据表现形式.特别是基于数据库的应用系统.表格更是不可缺少的界面 ...

  9. Visual C++中最常用的类与API函数

    这篇文章能让初学者快速了解visual C++ MFC中常见的核心的类与函数,虽然全部看下来有点枯燥,但对初学者快速了解MFC的框架结构很有好处. 常用类 CArchive类:用于二进制保存档案 CB ...

随机推荐

  1. ASP.NET运行原理_2

    当一个HTTP请求到服务器并被IIS接收到之后,IIS首先通过客户端请求的页面类型为其加载相应的.dll文件,然后在处理过程中将这条请求发送给能够处理这个请求的模块.在ASP.NET 3.5中,这个模 ...

  2. matlab 函数说明—ordfilt2

    今天看harris角点实现的源码,在某一个版本中看到了这个函数,不是很理解,doc ordfilt2之后还是不清楚,终于在matlab论坛上搞清楚了ordfilt2的功能.   中文理解函数名就是顺序 ...

  3. 在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持)

    在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持) 发布时间: 2015-02-27 00:16 1.spice的USB重定向 1.1 介绍 使用usb重定向,在clie ...

  4. 【转】 hive安装配置及遇到的问题解决

    原文来自: http://blog.csdn.net/songchunhong/article/details/51423823 1.下载Hive安装包apache-hive-1.2.1-bin.ta ...

  5. IOS成长之路-调用照相机和相册功能

    打开相机: //先设定sourceType为相机,然后判断相机是否可用(ipod)没相机,不可用将sourceType设定为相片库 UIImagePickerControllerSourceType ...

  6. thinking in java Generics Latent typing

    The beginning of this chapter introduced the idea of writing code that can be applied as generally a ...

  7. [iOS基础控件 - 6.6] 展示团购数据 自定义TableViewCell

    A.需求 1.头部广告 2.自定义cell:含有图片.名称.购买数量.价格 3.使用xib设计自定义cell,自定义cell继承自UITableViewCell 4.尾部“加载更多按钮”,以及其被点击 ...

  8. iOS--消息推送后方法回调情况(简)

    消息推送 工作 --- 消息推送   消息推送 消息推送集成参考友盟 http://dev.umeng.com/push/ios/integration 注意测试环境下,(友盟)设备在手机启动程序的时 ...

  9. 【WIN32进阶之路】:内存映射文件

    第一章:源起  遇到一个问题,如果一个客户数据文件有2g大,客户要通过界面查询文件中的数据并用列表控件显示数据,要怎么处理这个文件才能让应用程序不会长时间无响应,客户感觉不到程序的卡顿? 第二章:解决 ...

  10. 编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

    package car; public class Vehicle { //定义成员变量 private int wheels; private double weight; public int g ...