服务热线:13616026886

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

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

基于eclipse 3.0的swt编程


  一、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就可以啦

扫描关注微信公众号