`
20032334
  • 浏览: 35294 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jface对话框demo

阅读更多
package testDialog;
import java.io.FileNotFoundException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

import com.sun.corba.se.impl.activation.ProcessMonitorThread;

/*jface常用对话框
* ErrorDialog--可根据错误级别来显示错误消息,一般用于eclipse工作台
* MessageDialog--可显示提示消息的对话框,类似于SWT的对话框,但比SWT功能强大,是最常用的对话框
* ProcessMonitorDialog--可以显示后台线程进度的对话框
* InputDialog--用于输入消息的对话框,同时可以验证用户输入,并可以将验证的消息显示在对话框中
* PreferenceDialog--专门为设置首选项所使用的对话框,
* TitleAreaDialog--带有标题,图表和描述信息的对话框
* WizardDialg--向导式对话框,用于将一个操作分为几页来显示的对话框.
*/






//jface本地化---倒入语言包org.eclipse.jface.nll_3.1.1.jar and org.elcipse.jface.text.nll_3.1.1.jar,eclipse中自带多国语言包

public class TestDialog extends ApplicationWindow {

private Text text;
/**
* Create the application window
*/
public TestDialog() {
super(null);
}

/**
* Create contents of the application window
* @param parent
*/
@Override
protected Control createContents(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);

text = new Text(container, SWT.V_SCROLL | SWT.MULTI | SWT.READ_ONLY | SWT.WRAP /*(自动换行)*/| SWT.H_SCROLL);
text.setBounds(0, 0, 492, 291);
GridLayout gridLayout=new GridLayout(11,false);
container.setLayout(gridLayout);
GridData data=new GridData(SWT.FILL, SWT.FILL, true, true, 11, 1);
text.setLayoutData(data);

Button button=new Button(container,SWT.NONE);
button.setText("自定义对话框");

button.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent arg0) {
//标题名字
MessageDialog dialog=new MessageDialog(Display.getCurrent().getActiveShell(),"test",
//标题图标
null,
//显示消息
"提示",
//提示信息的图标
MessageDialog.INFORMATION,
//选择项总数
new String[]{"错误消息对话框","确认消息对话框","消息对话框","询问对话框","警告对话框"},
//默认选择索引
1);
int i=dialog.open();
//MessageDialog提供五种静态方法
if(i==0)
//错误消息对话框
{//title         //具体内容
MessageDialog.openError(Display.getCurrent().getActiveShell(), "错误消息对话框", "文件读取错误!");
text.append("错误消息对话框返回void"+"\r\n");
}
if(i==1)
{
boolean b=MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "确认消息对话框", "确定要保存文件吗?");
text.append("确认消息对话框返回boolean "+b+"\r\n");
}
if(i==2)
{
MessageDialog.openInformation(Display.getCurrent().getActiveShell(), "消息对话框", "确定要保存吗?");
text.append("消息对话框返回void"+"\r\n");
}
if(i==3)
{
boolean b=MessageDialog.openQuestion(Display.getCurrent().getActiveShell(), "询问对话框", "确定要保存文件吗?");
text.append("询问对话框"+"\r\n "+b+"\r\n");
}
if(i==4){
MessageDialog.openWarning(Display.getCurrent().getActiveShell(), "警告对话框", "确定要保存文件吗?");
text.append("警告对话框"+"\r\n"+"\r\n");
}
text.append("自定义对话框,返回按钮的索引值 "+i+"\n");
}
});
//创建输入对话框按钮
final Button btn = new Button(container, SWT.NONE);
final GridData gridData = new GridData(SWT.FILL, SWT.CENTER, false, false);
gridData.widthHint = 77;
btn.setLayoutData(gridData);
btn.setText("输入对话框");


/************************************************输入对话框事件*********************************************************************************/
final MyValidator validator=new MyValidator();
btn.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent event){
InputDialog input=new InputDialog(Display.getCurrent().getActiveShell(),//(父窗口)
"输入对话框",//(标题)
"请输入邮件地址",//(提示输入信息)
"初始值",//(默认的值,可以为空)
validator//(验证用户输入的有效性的对象,null表示不需要验证.要实现验证功能的类必须实现InputValidator接口)
);
int i=input.open();
text.append("输入对话框输入的值是"+input.getValue()+"  "+String.valueOf(i)+"\r\n");
}
});
/***********************************************-END-*********************************************************************************/
final Button button_1 = new Button(container, SWT.NONE);
final GridData gridData_1 = new GridData(SWT.FILL, SWT.CENTER, false, false);
gridData_1.widthHint = 99;
button_1.setLayoutData(gridData_1);
button_1.setText("带提示的对话框");

/************************************************带提示对话框*********************************************************************************/
button_1.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {

MyTitleAreaDialog dialog=new MyTitleAreaDialog(Display.getCurrent().getActiveShell());
dialog.open();
}
});
/************************************************    END   *********************************************************************************/

final Button button_2 = new Button(container, SWT.NONE);

final GridData gridData_2 = new GridData(SWT.FILL, SWT.CENTER, false, false);
gridData_2.widthHint = 94;
button_2.setLayoutData(gridData_2);
button_2.setText("错误提示对话框");


button_2.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {

/*在创建ErrorDialog对话框时,需要使用IStatus类.该类是一个接口,实现该接口的类有Status和MultiStatus.
* Status可以保存一个错误状态信息,而MultiStatus可以同时保存多个错误状态信息.
*/
//一个错误状态的信息
Status status=new Status(IStatus.ERROR,/*错误级别,有Status.INFO,Status.ERROR,Status.WARNING*/
"plugin id",/*主要用于Eclipse平台中识别插件的唯一标识号,如果不在Eclipse平台里,可以随意设置*/
1,/*也是eclipse平台有关的参数.表示Eclipse插件状态代码,如果不在该平台下可以随意使用*/
"未找到该类",/*出现错误时,提示给用户的信息*/
new ClassNotFoundException()/*异常出现类型*/
);
//包含多个错误信息的MultiStatus
IStatus status1=new Status(IStatus.INFO,"plugin id",IStatus.OK,"未找到类错误",new ClassNotFoundException());
IStatus status2=new Status(IStatus.ERROR,"plugin id",IStatus.OK,"未找到文件错误",new FileNotFoundException());
IStatus status3=new Status(IStatus.WARNING,"plugin id",IStatus.OK,"运行错误",new RuntimeException());
IStatus status4=new Status(IStatus.ERROR,"plugin id",IStatus.OK,"数据库错误",new SQLException());

Status[] statuses=new Status[]{(Status) status1,(Status) status2,(Status) status3,(Status) status4};

MultiStatus multi=new MultiStatus("plugin id",IStatus.OK,statuses,"运行时错误",new Exception());
ErrorDialog errorDialog=new ErrorDialog(Display.getCurrent().getActiveShell(),/*shell*/
"错误标题",
"对话框描述",
multi,
IStatus.ERROR|IStatus.CANCEL/*指定显示的错误级别*/
);
errorDialog.open();
}
});

final Button button_3 = new Button(container, SWT.NONE);

final GridData gridData_3 = new GridData(SWT.RIGHT, SWT.CENTER, false, false);
gridData_3.widthHint = 78;
button_3.setLayoutData(gridData_3);
button_3.setText("进度条对话框");

button_3.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
/*ProgressMonitorDialog其它一些常用的方法
*aboutToRun() 运行线程之前所调用的方法
* finishedRun() 线程完成之后调用的方法
* setCancelable(Boolean b) 设置是否显示"取消"按钮
* setOperationCancelButtonEnable(boolean b)设置取消按钮的状态,可用或不可用
* getProgressMonitor()获得运行时的IProgressMonitor对象
*/
ProgressMonitorDialog progressDialog=new ProgressMonitorDialog(Display.getCurrent().getActiveShell());

IRunnableWithProgress runnable=new IRunnableWithProgress(){
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
monitor.beginTask("开始执行任务", 100);

for(int i=0;i<10&&!monitor.isCanceled();i++)
{
Thread.sleep(500);
monitor.worked(10);
monitor.subTask("以完成第"+i+"个任务");
}
monitor.done();
}
};
try {
progressDialog.run(true,/*是否开辟另外一个线程*/
true,/*是否可执行取消操作的线程*/
runnable/*线程所执行的具体代码*/
);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InterruptedException e){
e.printStackTrace();
}

}
});

final Button button_4 = new Button(container, SWT.NONE);
final GridData gridData_4 = new GridData(SWT.FILL, SWT.CENTER, false, false);
gridData_4.widthHint = 75;
button_4.setLayoutData(gridData_4);
button_4.setText("自定义对话框");

button_4.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
CustomDialog customDialog=new CustomDialog(Display.getCurrent().getActiveShell());
customDialog.open();
}
});
return container;

}
//自定义验证类
private class MyValidator implements IInputValidator{

public String isValid(String str) {
if(str.indexOf("@")==-1)
{
return "错误!,请输入有效的电子邮件地址.";
}
return null;
}

}
/*TitleAreaDialog的用法--创建窗口所显示的内容要通过继承TitleAreaDialog类的方式,而不能直接创建.一般继承TitleAreaDialog时重写
* createContents(Composite c)--创建一个顶级容器来放置显示消息的部分和输入区域的部分.
* 和
* createDialogArea(Composite c)方法--创建对话框输入区域的控件,一般都要覆盖此方法.
* 常用方法
* setErrorMessage(String ...);设置错误提示信息
* setMessage(String str);
* setMessage(String str,int type)type指定的图标
* setTitle(String newTitle)设置提示信息标题.
* setTitle(RGB color);设置标题区域的颜色
* setTitleImage(Imang image);设置标题图片
*
*/

private class MyTitleAreaDialog /*(带有提示信息的对话框)*/extends TitleAreaDialog{

public MyTitleAreaDialog(Shell parent) {
super(parent);

}
@Override
protected Control createContents(Composite arg0) {
super.createContents(arg0);
this.getShell().setText("用户注册对话框");
this.setTitle("用户注册");
this.setMessage("请输入注册的用户名和密码");
//this.setTitleImage(null);
return arg0;
}


protected Control createDialogArea(Composite c) {
super.createDialogArea(c);
Composite composite=new Composite(c,SWT.NONE);
composite.setLayout(new GridLayout(2,true));
new Label(composite,SWT.NONE).setText("用户名: ");
final Text userName=new Text(composite,SWT.BORDER);

new Label(composite,SWT.NONE).setText("密码: ");
final Text password=new Text(composite,SWT.BORDER);
password.setEchoChar('*');

new Label(composite,SWT.NONE).setText("密码: ");

final Text repassword=new Text(composite,SWT.BORDER);
repassword.setEchoChar('*');

userName.addFocusListener(new FocusAdapter(){
public void focusLost(FocusEvent e)
{
if(userName.getText().equals("")){
setMessage("用户名不能为空!", IMessageProvider.ERROR);
return;
}
else
setMessage("");
}
});

password.addFocusListener(new FocusAdapter(){
public void focusLost(FocusEvent e)
{
if(password.getText().equals("")){
setMessage("密码不能为空!", IMessageProvider.ERROR);
return ;
}
else
setMessage("");
}
});

repassword.addFocusListener(new FocusAdapter(){
public void focusLost(FocusEvent e)
{
if(!repassword.getText().equals(password.getText())){
setMessage("密码要一致!", IMessageProvider.WARNING);
return ;
}
else
setMessage("");
}
});

return c;
}




}
//创建自定义对话框一般流程
/*继承Diaglog对象,一个对话框由对话框区域和按钮条组成.对话框区域是放置对话框各控件的区域,按钮条是放置对话框按钮的区域
* 一般覆盖以下方法
* Control createDialogArea(Composite parent):创建对话框的各种控件
* void createButtonsForButtonBar(Composite parent):创建对话框的按钮,调用Dialog中的createButton方法
* void buttonPressed(int buttonId):处理按钮事件
*/

private class CustomDialog extends Dialog{

protected CustomDialog(Shell arg0) {
super(arg0);
}

@Override
protected void buttonPressed(int arg0) {
if(IDialogConstants.OK_ID==arg0)
text.append("登陆"+"\r\n");
else if(IDialogConstants.CANCEL_ID==arg0)
text.append("取消");
}

@Override
protected void createButtonsForButtonBar(Composite parent) {
this.createButton(parent, IDialogConstants.OK_ID,"登陆",true);//1父窗口,2对话框ID 3是否默认被选中
this.createButton(parent, IDialogConstants.CANCEL_ID,"退出",false);
}

@Override
protected Control createDialogArea(Composite arg0) {
Composite composite=(Composite) super.createDialogArea(arg0);
Group group=new Group(composite,SWT.NONE);
GridLayout layout=new GridLayout(2,true);
layout.marginHeight=20;
layout.marginWidth=20;

group.setLayout(layout);
new Label(group,SWT.NONE).setText("用户名:");
Text user=new Text(group,SWT.BORDER|SWT.SINGLE);

new Label(group,SWT.NONE).setText("密码:");
Text pwd=new Text(group,SWT.BORDER|SWT.SINGLE);
user.setEchoChar('*');

return arg0;
}

}

public static void main(String args[]) {
try {
TestDialog window = new TestDialog();
window.setBlockOnOpen(true);
window.open();
Display.getCurrent().dispose();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* Configure the shell
* @param newShell
*/
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText("JFACE常用对话框");
}

/**
* Return the initial size of the window
*/
@Override
protected Point getInitialSize() {
return new Point(548, 410);
}
private void createActions() {
}

}
分享到:
评论

相关推荐

    jface对话框

    swt、jface对话框

    SWT/JFace开发实例

    SWT/JFace开发实例

    JAVA.SWTJFace JFace篇之向导式对话框.wps

    主要讲述了Jface向导式对话框的编写及代码。能够正确的运行在Eclipse中,希望能帮有所帮助

    SWT + JFace 入门

    5. **JFace对话框**:对话框用于与用户进行交互,如输入数据或确认操作。JFace提供了`Dialog`类的子类,如`InputDialog`和`MessageDialog`,方便快速创建对话框。 6. **表单构建**:JFace的`FormToolkit`和`...

    eclipse4 开发SWT/JFace demo

    eclipe 4以上的插件就支持CSS主题切换的功能 plugin.xml 中扩展点org.eclipse.core.runtime.products、org.eclipse.e4.ui.css.swt.theme

    org.eclipse.jface.rar

    2. **Dialogs**:JFace提供了各种标准对话框的实现,如OpenDialog、SaveDialog等,开发者可以通过继承和扩展这些对话框来满足特定需求。 3. **Bindings**:JFace的数据绑定机制使得模型和视图之间的数据同步变得...

    SWT/JFace专题 --- SWT/JFace概述

    5. 对话框(Dialogs):介绍如何使用JFace提供的标准对话框,如MessageDialog、InputDialog等,以及如何自定义对话框。 6. 表单(Forms):JFace如何支持创建复杂的表单界面,包括表单布局和数据验证。 7. 视图...

    SWT JFACE in Action(中文)

    3. **对话框和消息框**:展示如何使用JFace的对话框组件,如输入对话框、确认对话框,以及自定义对话框的创建方法。 4. **事件处理**:解释事件模型,以及如何监听和响应用户操作。 5. **表单构建**:介绍如何利用...

    mysource-jface

    通过分析这些源代码,开发者可以学习到如何创建和组织JFace应用程序,如何定义视图,如何处理模型和视图之间的数据绑定,以及如何使用JFace提供的对话框和表单组件。同时,"工具"标签可能意味着其中包含了辅助开发的...

    JFace教程

    4. **向导和对话框**:JFace 提供了一系列工具来创建向导和对话框,这些工具使得开发者能够快速创建出符合用户交互习惯的界面。 5. **图形编辑器**:JFace 包含一个图形编辑框架,用于创建可以处理图形数据的编辑...

    SWT_JFace_in_action_jface_action_

    7. 对话框和表单:讲解如何创建各种对话框和自定义表单。 8. 性能优化:探讨如何在SWT和JFace应用中优化性能。 通过阅读这本书,开发者将能够熟练掌握SWT和JFace,从而能够开发出既美观又高效的Java GUI应用。无论...

    swt/jface.jar

    3. `org.eclipse.jface_3.3.1.M20070910-0800b.jar`:JFace的主要库,包含了诸如对话框、表视图、字段编辑器等高级UI组件的实现。 4. `org.eclipse.core.commands_3.3.0.I20070605-0010.jar`:提供命令框架,使得...

    SWT JFace in Action - GUI Design with Eclipse 3.0-1932394273

    - **JFace对话框**: JFace还提供了一套标准的对话框,如警告对话框、错误对话框等,这些对话框的样式和行为都符合操作系统的规范。 - **数据绑定与MVC模式**: JFace支持数据绑定技术,可以自动同步UI控件与数据模型...

    Apress - The Definitive Guide To Swt And Jface

    - **第15章**:JFace对话框,详细介绍JFace提供的对话框组件及其定制方法。 - **第16章**:用户交互,探讨如何增强用户与应用程序之间的交互。 - **第17章**:偏好设置,介绍如何使用JFace管理用户偏好。 - **第...

    SWT/JFace从入门到精通

    JFace的主要组件包括视图(View)、编辑器(Editor)、对话框(Dialog)以及数据绑定机制。 3. Eclipse IDE与SWT/JFace Eclipse作为一款强大的集成开发环境(IDE),其用户界面大量使用了SWT和JFace。这使得...

    Eclipse_Swt_Jface_核心应用_部分19

    1.6.2 Eclipse的UI界面基于JFace 10 1.7 本章小结 10 第2章 配置SWT开发环境 11 2.1 下载和安装Eclipse 11 2.1.1 Eclipse下载页面介绍 11 2.1.2 下载Eclipse 12 2.1.3 安装Eclipse语言包 14 .2.1.4 ...

    JFace一些资料

    3. **Dialogs and Wizards**:JFace提供了一套标准的对话框和向导实现,如OpenDialog、SaveDialog等,简化了创建用户交互流程的工作。 4. **Action和Command**:Action是用户界面中可执行操作的表示,而Command则是...

    JFace 类包(3.14)

    2. **Dialogs和Views**:JFace 提供了一系列预定义的对话框(Dialogs)和视图(Views)类,如InputDialog、MessageDialog、WizardDialog等,这些对话框可以快速地构建常见的用户交互。而View则允许在Eclipse RCP...

    Swt JFace in Action 中文版

    5. **对话框和表单**:了解如何使用JFace创建各种对话框,如输入对话框、选择对话框等,以及构建复杂表单的方法。 6. **表和树组件**:探索Swt和JFace中的表格和树形视图组件,学习如何填充数据,以及实现排序、...

    jface源代码不容错过

    4. **对话框和窗口管理**:JFace提供了对话框和窗口的抽象,通过源代码,我们可以学习如何创建和管理这些用户交互界面。 5. **表和树的实现**:JFace对SWT的表格和树组件进行了封装,提供了更丰富的功能,如列排序...

Global site tag (gtag.js) - Google Analytics