SWT / JFace 对话框 (转)

本文介绍了JFace中的对话框功能,包括消息对话框、输入对话框等,详细讲解了各种对话框的使用方法及应用场景,并提供了示例代码。


 

 原文地址:http://secyaher.blog.163.com/blog/static/389557720091149111349/

对话框是GUI开发中不可缺少的一部分,对话框有系统定义的对话框、消息对话框和自定义对话框等,在这里只简要介绍如下几种类型的对话框:

消息对话框

输入对话框

进度监视对话框

自定义对话框

消息对话框   

 消息对话框可以显示用户提供帮助,在JFace中,消息对话框由MessageDialog实现。

消息对话框的功能

消息对话框(MessageDialog)是比较常用的对话框,它能够提供便捷的人机交互功能。JFace中提供了MessageDialog来实现消息对话框,它能够提供几种风格的显示。

1. 确认对话框:MessageDialog通过openConfirm方法打开确认对话框,例如“MessageDialog.openConfirm(shell, "Confirm", text.getText());”。

2. 错误对话框:MessageDialog通过openError方法打开错误对话框,例如“MessageDialog.openError(shell, "Error", text.getText());”。

3. 提示信息对话框:MessageDialog通过openInformation方法打开提示信息对话框,例如“MessageDialog.openInformation(shell, "Information", text.getText());”。

4. 提问对话框:MessageDialog通过openQuestion方法打开提问对话框,例如“MessageDialog.openQuestion(shell, "Question", text.getText());”。

5. 警告对话框:MessageDialog通过openWarning方法打开警告对话框,例如“MessageDialog.openWarning(shell, "Warning", text.getText());”。

其中,这几个方法都是静态的方法,且参数都是一样的,第一个参数表示父窗口组件,第二个参数表示标题信息,第三个参数表示显示的信息。

另外,openConfirm返回boolean型的值,表示用户是否选择确认,openQuestion也返回boolean型的值,表示是否正确。

消息对话框实例

创建消息对话框比较简单,在此将通过实例演示每种风格的消息对话框,代码如例程1所示。

例程1 MessageDialogExample.java

 

/**

 *为了节省篇幅,所有的import类已经被注释

 *读者可以通过ctrl+shift+o快捷键,自动引入所依赖的类

 *如果有问题可发邮件到ganshm@gmail.com

 * */

public class MessageDialogExample extends ApplicationWindow {

public MessageDialogExample() {

          super(null);

}

 

public void run() {

          setBlockOnOpen(true);

 

          open();

 

          Display.getCurrent().dispose();

}

 

protected void configureShell(Shell shell) {

          super.configureShell(shell);

 

          shell.setText("Send Message");

          shell.setSize(500, 400);

}

 

protected Control createContents(Composite parent) {

          Composite composite = new Composite(parent, SWT.NONE);

          composite.setLayout(new GridLayout(5, true));

 

          final Text text = new Text(composite, SWT.MULTI | SWT.BORDER

                            | SWT.V_SCROLL);

          GridData data = new GridData(GridData.FILL_BOTH);

          data.horizontalSpan = 5;

          text.setLayoutData(data);

 

          Button confirm = new Button(composite, SWT.PUSH);

          confirm.setText("Confirm");

          confirm.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

 

          Button error = new Button(composite, SWT.PUSH);

          error.setText("Error");

          error.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

 

          Button information = new Button(composite, SWT.PUSH);

          information.setText("Information");

          information.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

 

          Button question = new Button(composite, SWT.PUSH);

          question.setText("Question");

          question.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

 

          Button warning = new Button(composite, SWT.PUSH);

          warning.setText("Warning");

          warning.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

 

          final Label label = new Label(composite, SWT.NONE);

          data = new GridData(GridData.FILL_HORIZONTAL);

          data.horizontalSpan = 5;

          label.setLayoutData(data);

 

          final Shell shell = parent.getShell();

 

          confirm.addSelectionListener(new SelectionAdapter() {

                   public void widgetSelected(SelectionEvent event) {

                            //显示确认对话框

                            boolean b = MessageDialog.openConfirm(shell, "Confirm", text

                                               .getText());

                            //返回是否单击确定按钮(OK

                            label.setText("Returned " + Boolean.toString(b));

                   }

          });

 

          error.addSelectionListener(new SelectionAdapter() {

                   public void widgetSelected(SelectionEvent event) {

                            //显示错误对话框

                            MessageDialog.openError(shell, "Error", text.getText());

                            label.setText("Returned void");

                   }

          });

 

          information.addSelectionListener(new SelectionAdapter() {

                   public void widgetSelected(SelectionEvent event) {

                            //显示提示信息对话框

                            MessageDialog.openInformation(shell, "Information", text

                                               .getText());

                            label.setText("Returned void");

                   }

          });

 

        question.addSelectionListener(new SelectionAdapter() {

                   public void widgetSelected(SelectionEvent event) {

                            //显示提问对话框

                            boolean b = MessageDialog.openQuestion(shell, "Question", text

                                               .getText());

                            //返回是否对的按钮(Yes

                            label.setText("Returned " + Boolean.toString(b));

                   }

          });

 

          warning.addSelectionListener(new SelectionAdapter() {

                   public void widgetSelected(SelectionEvent event) {

                            //显示警告对话框

                            MessageDialog.openWarning(shell, "Warning", text.getText());

                            label.setText("Returned void");

                   }

          });

 

          return composite;

}

public static void main(String[] args) {

          new MessageDialogExample().run();

}

}

以上代码演示了如何创建每种形式的对话框,程序运行效果如图1所示。

 SWT / JFace 对话框 - secyaher - 隐龙 为了一生的信念

消息对话框

 

JFace中,消息对话框提供了很多显示的方式,例如显示错误提示信息、显示警告信息和显示提示信息等,用户可以根据需要选择正确的使用方式。

输入对话框  

   如果要实现用户和应用程序的交互,通常用户输入一些相关的信息,应用程序会根据这些信息进行操作,InputDialog实现了输入对话框的功能

输入对话框的功能

新建输入对话框(InputDialog)要创建一个InputDialog实例。InputDialog构造函数为:“public InputDialog(Shell parentShell, String dialogTitle,String dialogMessage, String initialValue, IInputValidator validator)”,解释如下。

l         parentShell:表示输入框的父窗口。

l         dialogTitle:表示输入框的标题。

l         dialogMessage:表示输入框的提示信息。

l         initialValue:表示初始输入框的值。

l         validator:表示输入框的校验器。

校验器是一个IInputValidator类型的对象(也可以为空),校验器中要实现isValid方法,该方法返回一个String类型的值或null,返回值为String类型时为错误的提示信息,如果为null则表示校验正确。下面代码为isValid的实现。

 public String isValid(String newText) {

   int len = newText.length();

 

   if (len < 5) return "Too short";

   if (len > 8) return "Too long";

 

   return null;

 }

上面代码表示如果newText的长度大于8或小于5时校验出错,提示错误信息为“Too short”或“Too long”,窗口的确定按钮为禁用。

输入对话框实例

为了更好地理解输入对话框,下面通过实例来介绍。实例中新建一个输入对话框,并加入了校验器,代码如例程2所示。

例程2 InputDialogExample.java

public class InputDialogExample extends ApplicationWindow {

public InputDialogExample() {

          super(null);

}

 

public void run() {

          setBlockOnOpen(true);

 

          open();

 

          Display.getCurrent().dispose();

}

 

protected void configureShell(Shell shell) {

          super.configureShell(shell);

 

          shell.setText("Get Input");

}

 

protected Control createContents(Composite parent) {

          Composite composite = new Composite(parent, SWT.NONE);

          composite.setLayout(new GridLayout(1, false));

 

          final Label label = new Label(composite, SWT.NONE);

          label.setText("This will display the user input from InputDialog");

 

          Button show = new Button(composite, SWT.PUSH);

          show.setText("Get Input");

          show.addSelectionListener(new SelectionAdapter() {

                   public void widgetSelected(SelectionEvent event) {

 

                            //新建输入对话框,并添加校验器

                            InputDialog dlg = new InputDialog(Display.getCurrent()

                                               .getActiveShell(), "", "Enter 5-8 characters", label

                                               .getText(), new LengthValidator());

                            //打开输入对话框

                            if (dlg.open() == Window.OK) {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值