首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

15.7  自定义对话框 

在界面的开发中,并不是所有的对话框都会符合用户的要求,用户经常要自己定义对话框。要定义自己的对话框,可以通过继承Dialog实现,也可以通过Dialog的子类实现,本节将继承JFace的TitleAreaDialog实现自定义对话框。

15.7.1  带标题区域对话框

带标题区域对话框(TitleAreaDialog)继承于JFace的Dialog类,TitleAreaDialog实现了几个比较常用的方法。

l   createContents:重写了Dialog的createContents方法,把对话框区域分成标题区域和对话框区域。

l   createTitleArea:建立标题区域的组件。

l   createDialogArea:建立对话框区域的组件。

l   setTitle:设置显示的标题。

l   setMessage:设置显示的信息。

l   setErrorMessage:设置显示的错误信息。

15.7.2  自定义对话框实例

本节实例中将重写TitleAreaDialog的createDialogArea方法和重写Dialog的createButtons- ForButtonBar方法,创建对话框区域和创建对话框按钮,并且添加对话框的校验方法validate,代码如例程15-9所示。

例程15-9  CreateOwnDialogExample.java

public class CreateOwnDialogExample {

     public static void main(String[] args) {

         Display display = new Display();

             final Shell shell = new Shell(display);

            

             shell.setSize(400,100);

             shell.setLayout(new FillLayout());

            

             Button b1 = new Button(shell, SWT.PUSH);

             b1.setText("Open mail Dialog ...");

             b1.pack();

             b1.setLocation(50, 50);

             b1.addSelectionListener(new SelectionAdapter() {

               public void widgetSelected(SelectionEvent se) {

                 

               MailDialog dial= new MailDialog(shell, new String[]{"mail", "gan"});

                 dial.open();

               }

             });

             shell.open();

             while (!shell.isDisposed()) {

               if (!display.readAndDispatch())

                 display.sleep();

             }

             display.dispose();

           }

}

class MailDialog extends TitleAreaDialog {

       public static final int OPEN = 9999;

       public static final int DELETE = 9998;

       List list;

       String[] items;

       String[] itemsToOpen;

       public MailDialog(Shell shell, String[] items) {

         super(shell);

         this.items = items;

       }

       public void create() {

         super.create();

         setTitle("Mail");

         setMessage("You have mail! \n It could be vital for this evening...");

       }

       //重写createDialogArea方法,创建对话框区域

       protected Control createDialogArea(Composite parent) {

         //添加对话框区域的父面板

         final Composite area = new Composite(parent, SWT.NULL);

         final GridLayout gridLayout = new GridLayout();

         gridLayout.marginWidth = 15;

         gridLayout.marginHeight = 10;

         //设置父面板的布局方式

         area.setLayout(gridLayout);

         //在对话框区域中添加List组件

         list = new List(area, SWT.BORDER | SWT.MULTI);

         final GridData gridData = new GridData();

         gridData.widthHint = 200;

         list.setLayoutData(gridData);

         list.addSelectionListener(new SelectionAdapter() {

           public void widgetSelected(SelectionEvent e) {

             validate();

           }

         });

         for (int i = 0; i < items.length; i++) {

           list.add(items[i]);

         }

         return area;

       }

       //添加自定义对话框的校验方法

       private void validate() {

         boolean selected = (list.getSelectionCount() > 0);

         getButton(OPEN).setEnabled(selected);

         getButton(DELETE).setEnabled(selected);

         if (!selected)

           setErrorMessage("Select at least one entry!");

         else

           setErrorMessage(null);

       }

       //重写Dialog的createButtonsForButtonBar方法创建对话框按钮

       protected void createButtonsForButtonBar(Composite parent) {

         //添加“Open”按钮

         Button openButton = createButton(parent, OPEN, "Open", true);

         // 初始状态为禁用

         openButton.setEnabled(false);

         //为“Open”按钮添加事件

         openButton.addSelectionListener(new SelectionAdapter() {

           public void widgetSelected(SelectionEvent e) {

             itemsToOpen = list.getSelection();

             setReturnCode(OPEN);

             close();

           }

         });

         //添加“Delete”按钮

         Button deleteButton = createButton(parent, DELETE, "Delete", false);

         deleteButton.setEnabled(false);

         //为“Delete”按钮添加事件

         deleteButton.addSelectionListener(new SelectionAdapter() {

           public void widgetSelected(SelectionEvent e) {

             int selectedItems[] = list.getSelectionIndices();

             list.remove(selectedItems);

             //校验当前数据

             validate();

           }

         });

         Button cancelButton = createButton(parent, CANCEL, "Cancel", false);

         //添加“Cancel”按钮

         cancelButton.addSelectionListener(new SelectionAdapter() {

           public void widgetSelected(SelectionEvent e) {

             setReturnCode(CANCEL);

             close();

           }

         });

       }

       public String[] getItemsToOpen() {

         return itemsToOpen;

       }

           

     }

上例添加了一个自定义对话框,并在测试程序中新建了自定义对话框,程序运行效果如图15-7所示。

图15-7  自定义对话框

一般来说,用户可以通过继承JFace现有的对话框进行扩展,在现有对话框的基础上可以非常容易地定义自己的对话框。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论