三
24
2009
由于设计了一个类继承Shell,导致出现了“SWTException: Subclassing not allowed”错误。搜索了一下才知道, Shell 是可以被继承的,但 Shell 的父类 Decorations 有一个 checkSubclass () 函数,当其子类不符合此方法的检查规则时,就会抛出异常。因此不是简单继承 Shell 就行了的,还要做一些比较复杂的工作。
因此我们有三种方式可以解决这类异常:
- 聚合优于继承,采用聚合方式解决,也符合面向对象的设计原则
- 重写 checkSubclass ()方法,去掉基类的验证检查
- 加上“package org.eclipse.swt.widgets”,让被扩展的类与扩展类处于同一类层次
no comments | tags: swt | posted in 编程实践
三
23
2009
关闭窗体shell 时显示确认对话框:
1
2
3
4
5
6
7
8
9
| shell.addShellListener(new ShellAdapter() {
public void shellClosed(ShellEvent e) {
MessageBox mb = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
mb.setText("Confirm Exit");
mb.setMessage("Are you sure you want to exit?");
int rc = mb.open();
e.doit = (rc == SWT.OK);
}
}); |
no comments | tags: swt | posted in 编程实践
三
11
2009
关键代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| Display display=Display.getDefault();
Tray tray=display.getSystemTray();
if(tray==null)
{
System.out.println("该系统不支持系统托盘!");
return;
}
final TrayItem item=new TrayItem(tray,SWT.NONE);
//将图片一起打包时,用此方法获取图片,this.getClass().getResourceAsStream().
Image img=new Image(display,this.getClass().getResourceAsStream("fav.ico"));
item.setImage(img);
item.setToolTipText("系统托盘测试");//托盘文字提示
//添加监听,鼠标右键退出
item.addListener(SWT.MenuDetect, new Listener(){
@Override
public void handleEvent(Event event) {
if(event.type==SWT.MenuDetect)
item.dispose();
}
});
while (!item.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose(); |
item.addListener( SWT.Show, listner ); //系统托盘显示
item.addListener( SWT.Hide , listner );//系统托盘隐藏
item.addListener( SWT.Selection , listner );//系统托盘单击选中
item.addListener( SWT.DefaultSelection , listner );//系统托盘双击选中
item.addListener( SWT.MenuDetect , listner );//系统托盘右击事件
no comments | tags: swt, tray | posted in 编程实践
三
10
2009
以前一直用PlayYO作为mp3播放器,但是比较不爽的是PlayYO总是从当前文件夹下的第一首歌开始顺序播放,前面的歌曲都听烦了,后面的歌曲却很少能听到。本来想找到PlayYO源代码,修改一下,让它能够实现随机播放,找了半天也没有找到源码,最后决定自己模仿PlayYO编写一个mp3播放器。经过的2天努力,终于实现了个雏形。
界面是用SWT实现的,音频播放用JMF实现,也正是因为这个原因,导致最后生成的文件有点大(5.25 MB),与PlayYO(11KB)比起来有着天壤之别。
使用方式:
将YYplayer放到存有mp3歌曲的文件夹下,双击运行,YYplayer就会随机播放此文件下的mp3歌曲了。
单击 – 暂停/开始
右击 – 退出
YYplayer下载:yyplayer
no comments | tags: jmf, project, swt | posted in 编程实践
九
16
2008
UI对象由Display对象负责管理,是SWT程序运行的核心。如果在非UI线程中调用界面上的控件对象是会在运行期间报错,所以Display对象使用asyncExec(Runnable runnable)和sysncExec(Runnable runnable)更新界面上的控件对象。
no comments | tags: swt, thread | posted in 编程实践
九
10
2008
只需要在项目属性Add External JARs处添加 org.eclipse.swt.win32.win32.x86_3.4.0.v3448f.jar,随着eclipse版本的变化SWT JAR包的名称可能也会有相应变化,现在使用的eclipse版本是3.4.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| import org.eclipse.swt.widgets.*;
public class Test {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("www.hijava.org");
shell.setSize(500, 400);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
} |
no comments | tags: eclipse, swt | posted in 编程实践