网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  基于eclipse 3.0的swt编程     
  文章作者:未知  文章来源:水木森林  
  查看:66次  录入:管理员--2007-11-17  
 
  一、swt简介

  java语言的声望和它在桌面应用程序(gui程序)所取得的成就显然极不相符,至今仍然很少能看到非常成功java桌面程序。虽然有jbuilder,netbean,jprobe等大型软件作为代表,但这仍不能证明java的gui程序是成功的:它们的外观总是和同一操作系统平台下的其它软件显得格格不入。对机器配置的需求也似乎永无止境,这使得它们只能被一些总是拥有当前最高性能pc的程序员们所容忍,或是那些不在乎金钱和时间的专业用户所接受。对绝大多数计算机使用者来说,awt或swing代表着怪异的界面和无法接受的速度。standard widget toolkit(swt)或许是java这一噩梦的终结者,广大java程序员终于可以开发出高效率的gui程序,它们拥有标准的外观,几乎没有人能看出你的程序是用java写出来的,更为重要的是,这些程序是跨平台的。

  swt本身仅仅是eclipse组织为了开发eclipse ide环境所编写的一组底层图形界面 api。或许是无心插柳,或是有意为之,至今为止,swt无论是在性能和外观上,都超越了sun公司提供的awt和swing。目前eclipse ide已经开发到了2.1版本,swt已经十分稳定。这里指的稳定应该包含两层意思:

  一是指性能上的稳定,其中的关键是源于swt的设计理念。swt最大化了操作系统的图形构件api,就是说只要操作系统提供了相应图形的构件,那么swt只是简单应用jni技术调用它们,只有那些操作系统中不提供的构件,swt才自己去做一个模拟的实现。可以看出swt的性能上的稳定大多时候取决于相应操作系统图形构件的稳定性。

  另一个稳定是指swt api包中的类、方法的名称和结构已经少有改变,程序员不用担心由于eclipse组织开发进度很快(eclipse ide每天都会有一个nightly版本的发布),而导致自己的程序代码变化过大。从一个版本的swt更新至另一版本,通常只需要简单将swt包换掉就可以了。

  二、eclipse3.0的swt编程

  1.swt比awt和swing要快多,因为它是利用操作系统的界面组件生成ui的,在java桌面设计领域掀起一场革命

  2.环境配置:

  windows系统+eclipse3.0

  3.具体操作:

  (1).新建一java项目,命名swt,文件结构如下:

  +swt
  +bin(编译输出)
  +src(原文件)
  +addressbookui.java
  +swt-awt-win32-3062.dll(以下均从eclipse/plugins/org.eclipse.swt.win32_3.0.1/os/win32/x86下导入)
  +swt-win32-3062.dll
  +javaw.exe.manifest

  (2).到项目的properties里,在java build path | libraries里将swt.jar导入

  (3).addressbookui.java原代码如下:

import org.eclipse.swt.widgets.display;
import org.eclipse.swt.widgets.shell;
import org.eclipse.swt.swt;
import org.eclipse.swt.widgets.button;
import org.eclipse.swt.widgets.group;
import org.eclipse.swt.widgets.label;
import org.eclipse.swt.widgets.text;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.selectionadapter;
import org.eclipse.swt.events.selectionevent;
public class addressbookui {
 private shell shell;
 private text misctext;
 private text addrtext;
 private text emailtext;
 private text phonetext;
 private text lnametext;
 private text fnametext;
 private button cancelbutton;
 private button savebutton;
 private button nextbutton;
 private button prevbutton;
 private button editbutton;
 private button deletebutton;
 private button newbutton;
 public static void main(string[] args) {
  addressbookui window = new addressbookui();
  window.open();
 }
 public void open() {
  final display display = new display();
  shell = new shell();
  shell.setsize(610, 477);
  shell.settext("address book");
 {
  newbutton = new button(shell, swt.none);
  newbutton.addselectionlistener(new selectionadapter() {
   public void widgetselected(selectionevent e) {
    cleartext();
    settexteditable(true);
    enableeditbuttons(false);
    enablesavebuttons(true);

    system.out.println("new button selected.");
   }
  });
  newbutton.setbounds(10, 380, 75, 35);
  newbutton.settext("new");
 }
 {
  deletebutton = new button(shell, swt.none);
  deletebutton.addselectionlistener(new selectionadapter() {
   public void widgetselected(selectionevent e) {
    cleartext();

    system.out.println("delete button selected.");
   }
  });
  deletebutton.setbounds(85, 380, 75, 35);
  deletebutton.settext("delete");
 }
 {
  editbutton = new button(shell, swt.none);
  editbutton.addselectionlistener(new selectionadapter() {
   public void widgetselected(selectionevent e) {
    settexteditable(true);
    enableeditbuttons(false);
    enablesavebuttons(true);
  
    system.out.println("edit button selected.");
   }
  });
  editbutton.setbounds(160, 380, 75, 35);
  editbutton.settext("edit");
 }
 {
  prevbutton = new button(shell, swt.none);
  prevbutton.addselectionlistener(new selectionadapter() {
   public void widgetselected(selectionevent e) {
    system.out.println("previous button selected.");
   }
  });
  prevbutton.setbounds(265, 380, 75, 35);
  prevbutton.settext("previous");
 }
 {
  nextbutton = new button(shell, swt.none);
  nextbutton.addselectionlistener(new selectionadapter() {
   public void widgetselected(selectionevent e) {
    system.out.println("next button selected.");
   }
  });
  nextbutton.setbounds(340, 380, 75, 35);
  nextbutton.settext("next");
 }
 {
  savebutton = new button(shell, swt.none);
  savebutton.addselectionlistener(new selectionadapter() {
   public void widgetselected(selectionevent e) {
    settexteditable(false);
    enableeditbuttons(true);
    enablesavebuttons(false);
 
    system.out.println("save button selected.");
   }
  });
  savebutton.setbounds(445, 380, 75, 35);
  savebutton.settext("save");
  savebutton.setenabled(false);
 }
 {
  cancelbutton = new button(shell, swt.none);
  cancelbutton.addselectionlistener(new selectionadapter() {
   public void widgetselected(selectionevent e) {
    settexteditable(false);
    enableeditbuttons(true);
    enablesavebuttons(false);

    system.out.println("cancel button selected.");
   }
  });
  cancelbutton.setbounds(520, 380, 75, 35);
  cancelbutton.settext("cancel");
  cancelbutton.setenabled(false);
 }
 {
  final group group = new group(shell, swt.none);
  group.settext("details");
  group.setbounds(10, 10, 585, 355);
  {
   final label label = new label(group, swt.none);
   label.setbounds(10, 20, 135, 25);
   label.settext("first name:");
  }
  {
   final label label = new label(group, swt.none);
   label.setbounds(10, 60, 135, 25);
   label.settext("last name:");
  }
  {
   final label label = new label(group, swt.none);
   label.setbounds(10, 100, 135, 25);
   label.settext("phone:");
  }
  {
   final label label = new label(group, swt.none);
   label.setbounds(10, 140, 135, 25);
   label.settext("email:");
  }
  {
   final label label = new label(group, swt.none);
   label.setbounds(10, 180, 135, 25);
   label.settext("address:");
  }
  {
   final label label = new label(group, swt.none);
   label.setbounds(10, 255, 135, 25);
   label.settext("miscellaneous information:");
  }
  {
   fnametext = new text(group, swt.border | swt.read_only);
   fnametext.setbounds(150, 15, 420, 25);
  }
  {
   lnametext = new text(group, swt.border | swt.read_only);
   lnametext.setbounds(150, 55, 420, 25);
  }
  {
   phonetext = new text(group, swt.border | swt.read_only);
   phonetext.setbounds(150, 95, 420, 25);
  }
  {
   emailtext = new text(group, swt.border | swt.read_only);
   emailtext.setbounds(150, 135, 420, 25);
  }
  {
   addrtext = new text(group, swt.border | swt.read_only | swt.v_scroll);
   addrtext.setbounds(150, 175, 420, 60);
  }
  {
   misctext = new text(group, swt.border | swt.read_only | swt.v_scroll);
   misctext.setbounds(150, 250, 420, 65);
  }
 }

 setupmenu();

 shell.open();
 while (!shell.isdisposed()) {
  if (!display.readanddispatch())
   display.sleep();
 }
}

private void setupmenu() {
 //create the menu bar
 menu menu = new menu(shell, swt.bar);
 shell.setmenubar(menu);
 //add the file option to it
 menuitem file = new menuitem(menu, swt.cascade);
 file.settext("file");
 //create a menu for the file option
 file.setmenu(new menu(file));
 //add menuitems to the file menu
 menuitem previtem = new menuitem(new menu(file), swt.none);
 previtem.settext("previous");

 menuitem nextitem = new menuitem(new menu(file), swt.push);
 nextitem.settext("next");

 menuitem seperator = new menuitem(new menu(file), swt.separator);
 menuitem quititem = new menuitem(new menu(file), swt.push);
 quititem.settext("quit");
 //add listeners for the actions
 previtem.addlistener(swt.selection, new listener() {
  public void handleevent(event e) {
   system.out.println("previous menu item selected.");
  }
 });
 nextitem.addlistener(swt.selection, new listener() {
  public void handleevent(event e) {
   system.out.println("next menu item selected.");
  }
 });
 quititem.addlistener(swt.selection, new listener() {
  public void handleevent(event e) {
   shell.dispose();
  }
 });
}

private void cleartext() {
 fnametext.settext("");
 lnametext.settext("");
 phonetext.settext("");
 emailtext.settext("");
 addrtext.settext("");
 misctext.settext("");
}

private void settexteditable(boolean editable) {
 fnametext.seteditable(editable);
 lnametext.seteditable(editable);
 phonetext.seteditable(editable);
 emailtext.seteditable(editable);
 addrtext.seteditable(editable);
 misctext.seteditable(editable);
}

private void enableeditbuttons(boolean enable) {
 newbutton.setenabled(enable);
 deletebutton.setenabled(enable);
 editbutton.setenabled(enable);
}

private void enablesavebuttons(boolean enable) {
 savebutton.setenabled(enable);
 cancelbutton.setenabled(enable);
}
}

  (4).测试运行,run就可以啦
 
 
上一篇: 基础入门-java字符集详解    下一篇: 转:《学不会的java,消不了的忧愁》之三
  相关文档
path 属性 11-16
在开始时击败递归类强制转换概念性错误 11-17
初学者入门:tomcat在win2000下的安装 11-17
x3d实战基础讲座之四 11-17
java中的string、stringbuffer和math类 11-17
利用视图链接使eclipse应用程序更丰富 11-17
JAVA中配置环境变量的设置方法 04-14
分析如何用 eclipse 进行 xml 开发 11-17
开源licenses简介 11-17
atendofline 属性 11-16
java初学者都必须理解的六大问题 11-16
虚拟现实之高级技巧(五) 11-16
sqlserver2000的jdbc驱动和preparedstatement的性能问题。 11-17
使用spring更好地处理struts动作 11-17
类的基本组成 11-17
jdo之前世今生 11-17
java文件编译执行与虚拟机(jvm)介绍 11-17
j2se综合:讨论关于java占用内存的研究 02-25
用java编制internet电子白板软件 11-17
诊断 java 代码:设计轻松的代码维护 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息