服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

教你学会eclipse3.0的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.bord

扫描关注微信公众号