王朝网络
分享
 
 
 

教你学会Eclipse3.0的swt编程方法

王朝other·作者佚名  2008-05-31
宽屏版  字体: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有