java创造swt_创建SWT中的HelloWorld插件项目

创建插件项目

1.选择主菜单“文件→新建→项目”命令,在弹出窗口中选择“插件开发→插件项目”,单击“下一步”按钮。

92260379bc7614f2b142e0bb1fdf9626.png

a58f0a58527d49c81ae2b2c918299314.png

2.进入下一个窗口,填入项目名myswt,单击“下一步”按钮。

cc56520dcae240c928cc2cb5be87b3f9.png

3.进入到下一个窗口,接受所有默认值,直接单击“完成”按钮。

1bcd1b4c6f73171107d679ee2e064edc.png

8a4bcd2710530976aa784a67df51f897.png

4.完成创建向导后,可以看到Eclipse中多了一个myswt项目,其中“插件依赖项”已经对支持SWT项目所需的jar包做好了引用。Src下的myswt包还用不到,这里将它删除掉。

ceecc675ecdecbe98618591781fa527a.png

创建HelloWorld程序

在myswt创建com.michael.swt包,在此包下创建一个HelloWorld类,然后把这个类改造为一个简单的SWT程序。

5a2440f81d294fcbf3a65abda998daf8.png

b4eb76dfa2a62d34724fda74c9cb6963.png

代码内容如下:

packagecom.michael.swt;

importorg.eclipse.swt.widgets.Display;

importorg.eclipse.swt.widgets.Shell;

publicclassHelloWorld {

/**

*@paramargs

*/

publicstaticvoidmain(String[] args) {

//Display负责管理事件循环和控制UI线程和其他线程之间的通信

finalDisplay display=Display.getDefault();

finalShell shell=newShell();//shell是程序的主窗口

shell.setSize(327,253);//设置主窗口的大小

shell.setText("HelloWorld");//设置主窗口的标题

//-------创建窗口中的其他界面组件----------

//.......

//-------END---------

shell.layout();//应用界面布局

shell.open();//打开shell主窗口

while(!shell.isDisposed()){//如果shell主窗口没有关闭,则一直循环

if(!display.readAndDispatch())//如果display不忙,就让display处于休眠状态

display.sleep();

}

display.dispose();//释放display资源

}

}

97c2b622985ccdbd021f83180de53952.png

从代码中可以看到SWT程序的几个特点:

它需要一个Display对象来支撑SWT界面的显示;

Shell是主窗口,其他所有界面组件(如按钮、文本框等)都创建于其中。

虽然这个程序涉及Display多线程操作,但在实际SWT编程中却很少关心这方面,基本是照搬同样的代码。

运行HelloWorld

选择主菜单“运行→运行方式→SWT应用程序”命令来运行HelloWorld.java,运行显示的是一个空白窗口。

d8543f9b8df5e8524f4addae115e3ea5.png

HelloWorld更进一步

上面的HelloWorld程序比较简单,现在给界面加入一个按钮,当单击该按钮时能弹出一个对话框,要实现这个效果,在原HelloWorld类的省略号处加入如下代码:Button button =newButton(shell,SWT.NONE);//创建一个按钮对象

button.setText(HelloWorld);//设置按钮上的文字

button.setBounds(88,94,100,25);//设置按钮在窗口中的位置和大小

//编写按钮被单击时的事件代码

button.addSelectionListener(newSelectionAdapter(){

publicvoidwidgetSelected(SelectionEvent e){

//弹出一个对话框,MessageDialog是JFace中的类

MessageDialog.openinformation(shell,"hello","HelloWorld");

}

})

代码还需要用Ctrl+Shift+O快捷键加入相关类的import语句,这时候要注意Button不要导入AWT的java.awt.Button,而应该导入SWT的org.eclipse.swt.widgets.Button.以后在写SWT程序时都要注意这个问题。代码修改后的运行效果下图。

1a31e0e008a5091359900f893e25ca64.png

完整代码如下:

packagecom.michael.swt;

importorg.eclipse.swt.widgets.Display;

importorg.eclipse.swt.widgets.Shell;

importorg.eclipse.swt.SWT;

importorg.eclipse.swt.events.SelectionAdapter;

importorg.eclipse.jface.dialogs.MessageDialog;

importorg.eclipse.swt.events.SelectionEvent;

importorg.eclipse.swt.widgets.Button;

publicclassHelloWorld {

/**

*@paramargs

*/

publicstaticvoidmain(String[] args) {

//Display负责管理事件循环和控制UI线程和其他线程之间的通信

finalDisplay display=Display.getDefault();

finalShell shell=newShell();//shell是程序的主窗口

shell.setSize(327,253);//设置主窗口的大小

shell.setText("HelloWorld");//设置主窗口的标题

//-------创建窗口中的其他界面组件----------

Button button =newButton(shell,SWT.NONE);//创建一个按钮对象

button.setText("HelloWorld");//设置按钮上的文字

button.setBounds(88,94,100,25);//设置按钮在窗口中的位置和大小

//编写按钮被单击时的事件代码

button.addSelectionListener(newSelectionAdapter(){

publicvoidwidgetSelected(SelectionEvent e){

//弹出一个对话框,MessageDialog是JFace中的类

MessageDialog.openInformation(shell,"hello","HelloWorld");

}

});

//-------END---------

shell.layout();//应用界面布局

shell.open();//打开shell主窗口

while(!shell.isDisposed()){//如果shell主窗口没有关闭,则一直循环

if(!display.readAndDispatch())//如果display不忙,就让display处于休眠状态

display.sleep();

}

display.dispose();//释放display资源

}

}

注意:

虽然Shell的类定义中没有final前缀,但我们依然不能不继承Shell类,因为Shell的父类Decorations有一个checkSubclass()方法,继承Shell的类都会在执行此方法时抛出异常“org.eclipse.swt.SWTException:Subclassing not allowed”。

在面向对象的设计原则中,组合优于继承。Eclipse鼓励遵循这一原则,所以不要轻易去继承SWT中的界面组件(如Shell类)来实现扩展,除非是那些最初设计目的就是说为了通过继承方式来扩展功能的类,例如对话框的Dialog类。一般来说,大部分SWT组件都不要继承它,而大部分JFace组件可以通过继承来扩展。*********************************************************

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值