基于Eclipse 3.0的SWT编程

发表于:2007-06-11来源:作者:点击数: 标签:
一、SWT简介 Java语言的声望和它在桌面应用程序(GUI程序)所取得的成就显然极不相符,至今仍然很少能看到非常成功Java桌面程序。虽然有JBuilder,Netbean,JProbe等大型软件作为代表,但这仍不能证明Java的GUI程序是成功的:它们的外观总是和同一操作系统平

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

(责任编辑 火凤凰 sunsj@51cto.com  TEL:(010)68476636-8007)



原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
...