在eclipse中使用swt进行界面设计.docx

上传人:b****4 文档编号:4903891 上传时间:2022-12-11 格式:DOCX 页数:11 大小:24.63KB
下载 相关 举报
在eclipse中使用swt进行界面设计.docx_第1页
第1页 / 共11页
在eclipse中使用swt进行界面设计.docx_第2页
第2页 / 共11页
在eclipse中使用swt进行界面设计.docx_第3页
第3页 / 共11页
在eclipse中使用swt进行界面设计.docx_第4页
第4页 / 共11页
在eclipse中使用swt进行界面设计.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

在eclipse中使用swt进行界面设计.docx

《在eclipse中使用swt进行界面设计.docx》由会员分享,可在线阅读,更多相关《在eclipse中使用swt进行界面设计.docx(11页珍藏版)》请在冰豆网上搜索。

在eclipse中使用swt进行界面设计.docx

在eclipse中使用swt进行界面设计

在eclipse中使用swt进行界面设计swt是一个ibm开发的跨平台gui开发工具包。

至于为什么ibm要费劲自己另起炉灶开发一个gui工具包,而不是使用sun现有的由awt,swing,java2d,java3d等构成的javagui框架,那就说来话长了。

(记得在一个bbs上读过一个关于swt起源的调侃类的帖子)。

1.为什么要使用swt?

  swt是一个ibm开发的跨平台gui开发工具包。

至于为什么ibm要费劲自己另起炉灶开发一个gui工具包,而不是使用sun现有的由awt,swing,java2d,java3d等构成的javagui框架,那就说来话长了。

(记得在一个bbs上读过一个关于swt起源的调侃类的帖子)。

  在swt之前,sun已经提供了一个跨平台gui开发工具包awt(abstractwindowingtoolkit).虽然awt框架也使用的是原生窗口部件(nativewidgets),但是它一直未能突破lcd问题。

lcd问题导致了一些主要平台特征的遗失。

如果你不明白的话(其实我也没明白),换句话说,如果平台a有窗口部件(widgets)1-40,而平台b有窗口部件(widgets)20-25,那么跨平台的awt框架只能提供这两个窗口部件集的交集。

  为解决这个问题,sun又创建了一个新的框架。

这个框架不再使用原生窗口部件,而是使用仿真窗口部件(emulatedwidgets)。

这个方法虽然解决了lcd问题,并且提供了丰富的窗口部件集,但是它也带来了新的问题。

例如,swing应用程序的界面外观不再和原生应用程序的外观相似。

虽然在jvm中这些swing应用程序已经得到了最大程度的性能改善,但是它们还是存在着其原生对应物所不具有的性能问题。

并且,swing应用程序消耗太多的内存,这样swing不适于一些小设备,如pda和移动电话等。

  ibm进行了尝试以彻底解决awt和swing框架带来的上述问题。

最终,ibm创建了一个新的gui库,这就是swt。

swt框架通过jni来访问原生窗口部件。

如果在宿主(host)平台上无法找到一个窗口部件,swt就会自动地模拟它。

2.swt应用程序的组成  一个swt应用程序的基本组成部分为显示界面(display)、命令界面(shell,使命令进入并使运行初始化)和窗口部件(widgets)。

display负责管理事件循环和控制ui线程和其他线程之间的通讯。

shell是应用程序中被操作系统窗口管理器管理的窗口。

每个swt应用程序至少需要一个display和大于等于1个的shell实例。

  图1:

从不同的角度看swt应用程序  图1从不同的角度展示了swt应用程序。

左侧的图是一个简化的ui对象的继承图。

中间的图展示了ui对象的容器结构(containmentstructure)。

右侧的图则是创建后的ui外观。

  如果一个应用程序使用了多个线程,那么每个线程都使用的是display对象分配给它自己的实例。

程序员可以使用静态方法display.getcurent()来得到display对象的当前活动的实例。

shell用于在特定的操作系统中表现窗口。

shell可以最大化、最小化或正常化。

shell有两种类型。

第1种是高层shell,它是display的子窗口,同时它也是一个主窗口。

第2类是对话shell,这种shell要依赖于其他的shell窗口存在。

shell窗口最终成为上述那种类型,要看在创建shell时传递给shell构造函数的是什么风格位(stylebits)。

一个shell的默认值是dialogshell。

也就是说,如果不带参数,那默认就是一个对话shell。

而如果给参数赋予了一个display对象,则该shell将是一个高层shell。

  一些窗口部件的属性必须在创建它们的初期就要被设置。

这些窗口部件的属性就是前面所说的风格位(stylebits)。

在swt的类中,风格位被定义为常数。

例如,buttonbutton=newbutton(shell,)。

可以使用或(or)操作符"|"来设置多个风格位。

例如,如果想设置一个带边界的压下按钮,需要传递swt.push|swt.border作为风格位参数。

3.进行swt开发前的环境设置  为了进行swt应用开发,你需要把swt库添加到类路径(classpath)上,并设置必要的环境变量。

  首先,你要在eclipse_home\eclipse\plugins\org.eclipse.swt.win32_2.1.0\ws\win32目录下找到swt.jar库文件。

注意这里的"org.eclipse.swt.win32_2.1.0"目录是和eclipse的版本有关的。

实在找不到你就用文件搜索功能吧。

然后依次打开下面窗口project->properies->javabuildpath->libraries->addvariable->eclipsehome->extend将swt.jar文件加到类路径中。

  接着,你肯定想编译这个swt应用了。

但是会出现下面所示的运行异常。

出现这个异常的原因是swt.jar库使用的是原生库。

你需要设置java.library.path环境变量来使用java中的原生库。

  控制台(console)的输出如下:

  java.lang.unsatisfiedlinkerror:

noswt-win32-2136injava.library.path  atjava.lang.classloader.loadlibrary(unknownsource)  atjava.lang.runtime.loadlibrary0(unknownsource)  atjava.lang.system.loadlibrary(unknownsource)  atorg.eclipse.swt.internal.library.loadlibrary(library.java:

108)  atorg.eclipse.swt.internal.win32.os.(os.java:

46)  atorg.eclipse.swt.widgets.display.internal_new_gc(display.java:

12Array1)  atorg.eclipse.swt.graphics.device.init(device.java:

547)  atorg.eclipse.swt.widgets.display.init(display.java:

1316)  atorg.eclipse.swt.graphics.device.(device.java:

Array6)  atorg.eclipse.swt.widgets.display.(display.java:

2Array1)  atorg.eclipse.swt.widgets.display.(display.java:

287)  atcom.swtdesigner.trytry.main(trytry.java:

24)  exceptioninthread"main"  按下面的步骤设置java.library.path变量:

依次打开run->run...->javaapplicaton->"project"->arguments->vmarguments。

在"vmarguments"中输入  -djava.library.path=c:

\eclipse\plugins\org.eclipse.swt.win32_2.1.0\os\win32\x86  注意要输入你自己的swt.jar所在的路径。

  小技巧:

加载原生库:

  如果你需要加载自己应用程序所使用的原生库,可以使用runtime.getplatform.loadlibrary("libraryname")方法。

如何用jsp设计登录界面

<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%>

<%@taglibprefix="s"uri="/struts-tags"%>

<%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+":

//"+request.getServerName()+":

"+request.getServerPort()+path+"/";

%>

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

">

MyJSP'login.jsp'startingpage

--

-->

用户登录

formaction=""method="post"theme="simple">

用户名:

textfieldname="">

textfield>

密码:

passwordname="">

password>

submitvalue="登录">

submit>

resetvalue="取消">

reset>

form>

界面布局语言介绍

  在学习界面布局语言的设计之前,先来了解一下该语言的使用是非常有帮助的。

我们的界面布局语言非常简单,简单到只有一种原子:

Component。

Component是一种基本的布局元素,可以对Component进行平移和伸缩,使其和给定的一个布局空间Rectangle匹配。

比如对于Button这个Component来讲,它具有传统按钮的外观,但是它在布局上所占的实际空间则是由为其指定的Rectangle决定的。

此外,Component要最终在界面上显示出来,就必须有一个物理上的Container。

也就是说,只要给定了一个Rectangle和一个Container,一个Component就可以在界面上指定的布局位置呈现出来。

  例如,当我们使用布局语言在一个JFrame上坐标位置为(0,0)展示一个width为200,height为60的按钮时,我们可以这样来描述(为了简洁起见,后面的代码实例中均略去Layout名字空间前缀):

Button().title(“button1”).at(0,0,200,60).in(this.getContentPane());

  仅仅提供这样一种原子元素的语言显然无法满足我们前面提到的目标。

在我们的界面布局语言中,还提供了两种在布局中非常常用的两种从已有组件构造新组件的组合手段:

above和beside。

其中above组合子接收3个参数:

两个现有Component以及一个比例,它会产生出一个新的复合Component,其中按照给定的比例把第一个Component摆放在第二个Component之上。

Beside组合子接收同样的3个参数,并且也产生出一个新的复合Component,其中按照给定的比例把第一个Component摆放在第二个Component左边。

  例如,如果我们希望在一个给定的ContainerC上的Rectangle(0,0,300,40)中,平行摆放一个TextField和一个Button,且希望TextField占据80%的比例时,可以这样来描述:

beside(TextField(),Button().title(“ok”),0.8).at(0,0,300,40).in(C)

同样,我们可以使用above来进行如下描述:

above(TextField(),Button().title(“ok”),0.5).at(0,0,300,60).in(C)

  值得注意的是,在我们的界面布局语言中,Component在beside和above操作下是封闭的,也就是说beside和above操作的结果同样也是Component,并完全可以作为基本的Component来再次进行beside和above组合。

这样我们就可以使用这两个简单的操作生成更加复杂的Component来,从而完成复杂的界面布局。

比如,我们可以这样来进行描述:

ComponentL=beside(TextField(),Button().title(“…”),0.8);

above(L,Button().title(“ok”),0.5).at(0,0,300,60).in(C)

  为了保证界面布局语言的完备性,我们增加了一种特殊的原子元素:

Empty。

它的作用只是占据一定的布局空间。

比如,如果我们希望在一个布局空间中右半边放置一个Button,左半边空置,就可以这些描述:

beside(Empty(),Button(),0.5).at(0,0,200,40).in(C)

读者在后面可以看到,正是这个Empty以及beside和above操作的闭包性质为我们描述任意复杂的布局样式提供了可能。

  在有了这些基础的布局元素和组合手段后,我们就可以通过组合手段来把一些典型的布局样式抽象出来。

在下一小节中读者将会看到,布局语言中的beside和above组合操作其实就是Java中的普通方法,因此我们的布局语言中不需要什么特别的抽象手段。

也就是说,我们可以直接使用Java中已有的抽象手段。

  例如,如果我们希望抽象出这样一种布局样式,其中给定一个布局空间和一个布局组件,我们期望该组件能够按照指定的纵、横留白比例位于该布局空间的中心地带。

我们可以把该布局样式抽象出来,并命名它为center。

并可以在更复杂的布局样式中把center当作一个基本语素使用。

center的实现如下:

publicComponentcenter(Componentcp,floathRatio,floatvRatio){

floats1=(1-2.0*hRatio)/(1.0-hRatio);

floats2=(1-2.0*vRatio)/(1.0-vRatio);

Componentu=above(Empty(),above(cp,Empty(),s2),vRatio);

returnbeside(Empty(),beside(u,Empty(),s1),hRatio);

}

在JSP中设计用户界面

创建页面流时,WebLogicWorkshop提供各种标记库,您可以使用其中包含的标记设计JSP。

页面流向导生成的每个JSP文件都定义为包括引用标记库的<%taglib...>语句。

例如:

--由WebLogicWorkshop生成-->

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"%>

<%@tagliburi="netui-tags-databinding.tld"prefix="netui-data"%>

<%@tagliburi="netui-tags-html.tld"prefix="netui"%>

<%@tagliburi="netui-tags-template.tld"prefix="netui-template"%>

html>

</p><p>Web应用程序页</p><p>

新建Web应用程序页

html>

注意:

WebLogicWorkshop将TLD和TLDX库文件置于Web项目的/WEB-INF文件夹下。

TLD文件是J2EE标准标记库描述符文件。

TLDX文件是WebLogicWorkshop的特定文件,包含有关标记在IDE中应如何起作用的信息。

此信息包括显示、属性表单和其他信息。

在IDE中,如果JSP文件在设计视图或源代码视图中打开,则可以在选项板窗口中获取标记。

例如:

可以将这些标记从“选项板”窗口拖放到设计视图中。

在某些情况下,会出现一个对话框窗口,允许您将操作分配给使用表单Bean的标记。

例如:

注意:

在将标记图标从“选项板”窗格移动到“设计视图”画布时,您会注意到,在“设计视图”画布中,插入点是用垂直线显示的。

请记住此插入点,因为它将决定标记代码在JSP中的初始位置。

JSP设计器是为开发人员设计的,开发人员需要快速汇编基于NetUI、NetUI数据绑定和NetUI模板标记的JSP页。

作为一个开发人员,您可以创建这些页的初稿,并决定表单操作和其他上下文以将简单或复杂的数据显示给用户。

在JSP设计器中,可以利用“放置向导”和(源代码视图中的)其他代码完成工具以协助开发工作。

JSP设计视图并不是设计用作完全的JSP图形编辑器,您可以切换到源代码视图以输入文本,或者使用您喜欢的JSP编辑产品来完成页,为显示添加更多润色。

本主题描述“NetUI”库和“NetUI模板”库中的各种元素。

这些库包含用于设计用户界面(如标签、单选按钮和链接)的典型组件。

这些库中的许多组件,尤其是表单组件,允许您为用户提供数据或从用户引出数据。

此外,“NetUI数据绑定”库包含用于向用户显示复杂数据的专用组件。

NetUI数据绑定标记另行在JSP中显示复杂数据集中讨论。

注意:

“选项板”窗口还提供一个称为“HTML”的标记库,该库包含几种标准HTML标记。

这些HTML标记不具有可以与页面流运行时进行交互的特殊特性。

NetUI标记

“选项板”窗口中的NetUI组件存储在netui-tag-html.tld库中,此库是默认导入JSP的:

<%@tagliburi="netui-tags-html.tld"prefix="netui"%>

将NetUI组件添加到JSP时,您会注意到组件名称的前缀为“netui”,例如:

buttonvalue="Start"action="letsGo"type="submit"/>

下表总结了NetUI标记的常见用途。

有关标记及其特性的详细描述,请参阅JSP标记引用,也可以在源代码视图中将光标置于标记内部并按F1键:

标记的典型用途

标记名

概要

导航

anchor

生成指向特定URI的URL编码超链接。

imageAnchor

生成一个用URL编码的超链接,链接到指定URI,此URI有一个作为正文包含进来的图像。

button

生成名称是只读的按钮,通常用于重置或提交表单,或触发特定操作(如“signingout”)。

imageButton

生成一个作为按钮的图像,包括图像的URL和(可选)悬停图像,通常用于提交表单。

读/写数据(使用dataSource、defaultValue特性)

form

代表一个与表单Bean关联的输入表单,此表单Bean的属性与表单的各个字段相对应。

checkBox

生成一个绑定到表单Bean属性的复选框。

checkBoxGroup

对CheckBoxOption集合进行归组,并处理其值的数据绑定。

有关示例,请参阅页面流详细示例。

checkBoxOption

一个复选框,其状态由包含它的checkBoxGroup确定。

hidden

生成隐藏表单字段。

radioButtonGroup

对RadioButtonOption集合进行归组,并处理其值的数据绑定。

有关示例,请参阅页面流详细示例。

radioButtonOption

单选按钮,状态由包含它的RadioButtonGroup确定。

select

渲染下拉列表。

有关示例,请参阅页面流详细示例。

selectOption

选项,状态由包含它的select组件确定。

textArea

渲染数据绑定的TextArea。

textBox

渲染数据绑定的TextBox。

错误报告

bindingUpdateErrors

开发时帮助标记,显示发送表单时发生的数据绑定更新错误的相关消息。

这些消息显示在命令窗口中。

默认情况下,此标记在服务器以生产模式运行时是禁用的。

error

使用给定错误键值渲染单个错误消息。

有关详细信息,请参阅验证用户输入。

errors

渲染发现的错误消息集。

有关详细信息,请参阅验证用户输入。

exceptions

渲染已格式化的异常消息。

参数

parameter

将URL参数写入其父标记中的URL。

有关示例,请参阅在页面流中使用数据绑定中的url数据绑定上下文。

parameterMap

将URL参数映射中的每个参数写入其父标记中的URL。

其他

base

提供此页中每个URL的基。

content

显示只读的标准或动态生成的文本。

image

生成图像。

label

根据数据绑定表达式或字面值生成样式化的只读文本。

node

实例化TreeNode对象,该对象将要添加到父标记(树或其它节点)中。

tree

渲染一个由TreeNode对象集代表的树控件。

Netui模板标记

“选项板”窗口中的NetUI模板组件存储在netui-tag-template.tld库中,此库是默认导入JSP的:

<%@tagliburi="netui-tags-templat

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1