前一节中我们单介l了一?/span> Action 。其实所谓的 Action 是一个最常用的事Ӟ举个例子来说Q对于一个按钮来说它可以有多个事Ӟ比如按键Q焦点,鼠标Q等{等{吧Q但是实际上在用程序的时候,我们最兛_的,是按下去这个按钮会发生什么,q个其实是所谓的 Action 。如果大家以前做q?/span> swing/awt 变成的话Q应该对 Action 不会陌生?/span>
?/span> JFace 里面Q一?/span> Action 可以对应多个 GUI 对象Q这些对象就是所谓的 Contribution Item 。比如我们在一般程序里面很常见的“文件”菜单,下面都会有“新建”,“保存”等{。同时我们可以在工具条上攄相应的按钮,那么q些都是有相同的功能Q在 JFace 里面我们可以只写一?/span> Action Q然后把它映到不同?/span> ContributionItem 去,而不必ؓ每个部g都写一串处理事件?/span>
我们下面q是通过一个简单的例子来说明,?/span> JFace 中怎么使用菜单和工hq两U最基本也是最有用?/span> Contribution Item ?/span>
我们q个E序写得很傻Q就是一个光U秃的窗口上做了一个菜单和工具条按钮,功能也只有一个,是每次点一下,弹Z个输入框来问你名字是什么,然后昄一?/span> Hello, xxx 之类的?/span>
首先我们q是来写一?/span>
Action
c:
代码D?/span>
17
q只是一个很单的 Action c,没有太多可说的?/span>
然后我们创徏一?/span>
ApplicationWindow
c:
代码D?/span> 18
大家可能已经注意CQ在q里面我们重载了
createMenuManager
?/span>
createToolBarManager
两个ҎQ它们的用途就和名字一P一个是用来创徏菜单的,一个是用来创徏工具条的。重载了q两个方法以后,通过在构造函C调用
addMenuBar
?/span>
addToolBar
让工h和菜单显C出来?/span>
q里值得一提的?/span>
MenuManager
?/span>
ToolBarManager
c,如果大家M?/span>
API
文的话会发现它们都是所谓的
contribution manager
Q实C
IConntributionManager
接口Q,你可以通过q些
contribution manager
来实现对特定lg的管理(d删除{等Q?/span>
具体到菜单的创徏Q看了我们上面的代码很明白了,q接调用相?/span>
MenuManager
?/span>
add
Ҏ?/span>
action
d上就可以了?/span>
JFace
会自动找到这?/span>
Action
?/span>
getText
Ҏ讄菜单的文字。如果是有好几层菜单Q那么只要在重新
new
一?/span>
MenuManager
d到已有的
MenuManager
里面可以了。就象前面代码中的:
至于工具条就更简单了Q创Z?/span>
ToolBarManager
然后直接
add
对应?/span>
Action
可以了?/span>
如果菜单只是文字q没有什么,如果你的工具条都是文字是不是会显得干巴巴的?其实只要我们?/span>
Action
讄
ImageDescriptor
可以了Q比如你可以自己M个图标保存到
Action
的包下面Q我M一?/span>
hi.gif
Q,然后?/span>
Action
的构造函数改写成q样Q?br />
大家注意最后一句话Q就是ؓ
action
讄图标的。然后再q行一下就会发现菜单和工具栏都有图标了?/span>
在这里给一个社区做个广告,大家可以登陆到在中国
eclipse
CQ?/span>
http://www.eclipseworld.org
Q,在那里你也可以找到很多的帮助和支持,当然Q你也可以在那里扑ֈ我?/span>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=523860
大家好,因ؓ工作的事情搞了一个多月,现在l于暂时安定下来了。这一pd的文章我也会l箋往下写?/span>
在这一节中Q我会向大家介绍
JFace
中的事g模式。其实我怿q篇文章的读者应该大部分都会接触
eclipse
Q这样可能也会接触过
eclipse
的插件开发。就是没有接触过Q大家也可能会有?/span>
eclipse
里面新徏工程的时候出于各U原因(比如好奇心)点了
plug-in project
的时候吧。其实作Z个程序员来讲Q保持好奇是很重要的。如果你大概看过一?/span>
plug-in project
的结构,虽然可能不能全部理解Q但是我怿也应该对
Action
之类有一些了解。我们这一节主要就是围l?/span>
Action
来写的。ؓ了增加可L,我们首先介绍几个名词Q这些名词都可以?/span>
eclipse
的文中扑ֈ?/span>
JFace
中的一?/span>
Action
可以单地理解成一?span style="COLOR: blue" twffan="done">命o。那么它?span style="COLOR: blue" twffan="done">事g有什么关pdQ比如说我点了一个菜单,那么点击本n是一个事Ӟ但是q个事g的媄响就是相应的命o被执行了。大家日怋用的一些Y件比?/span>
Office
都是有菜单和工具栏的Q而一个菜单项和一个工h可能执行的是同一个命令。比?/span>
Word
里面要新Z个文的话可以通过
?/span>
文g
?/span>
菜单下的
?/span>
新徏
?/span>
实现Q也可以通过点击工具栏上相应的图标实现。这个新建地功能本n?/span>
JFace
里面是可以?/span>
Action
来实现的?/span>
?/span>
JFace
里面Q?/span>
Action
可以兌到菜单,工具条,以及按钮Q也是
Button
Q。当然关于如何关联,我们会在后面向大家详l介l?/span>
Action ?/span> JFace 里面的定义是一个接?/span> org.eclipse.jface.action.IAction 。当然实际上你写E序的时候必自己来实现q个接口Q写q Action cL?/span>
IAction 里面最重要的方法是 run() Q它也是事g触发以后执行的代码。其他的Ҏ都是一些辅助性的ҎQ不是我们要x的重炏Vؓ了能够将_֊集中在我们所x的事情上Q通常我们不是实现 IAction 接口Q而是通过l承 org.eclipse.jface.action.Action q个抽象cL实现 Action 。下面我们通过一个例子来说明 Action 的用法?/span>
Hello,Action!
首先我们先不用L面,先定义一个最单的 Action cR?/span>
代码D?/span>
1
5
q段代码其实应该q是很好L的。带参的构造函数带q来一?/span> Shell 实例Q?/span> run() Ҏ说明了这?/span> Action 的功能就是显CZ个对话框。第 5 行中的代码调用了父类的构造函敎ͼ其中W一个参数是 Action 对应的文本,前面?/span> & W号表明?/span> H 是热键,而第二个参数则是一个风格参数。如果大家l向后看的话Q就会发现这?/span> Action 被附加在了一个按钮上面,而按钮上昄的文本就?/span> Hello Q如果你定义的风g?/span> AS_PUSH_BUTTON 而是 AS_RADIO_BUTTON 的话׃发现按钮已经不是一个纯_的按钮了,而是一个单选钮。相应的其他风格可以参照 Javadoc?br />
代码D?/span>
16
和前面一节的代码相比Q我们只是修改了
createContents
Ҏ。首先创Z一?/span>
HelloAction
的实例,然后又创Z一?/span>
ActionContributionItem
的实例,最后调用了q个实例?/span>
fill
Ҏ按钮添加到H口中,q就是全部了。是不是很简单呢Q程序运行出来的效果如下图:
?/span> 1 6
可能看了q个例子Q你会认?/span>
ActionContributionItem
q个c表C的是一个按钮了。但是实际上q不是的Q它在图形界面上表示成什么样子,随着不同?/span>
fill
调用又有不同。在下一节中Q我会向大家深入介绍
Contribution Item
以及
JFace
中的菜单Q工h{的应用。这一节就到这里结束了Q因为刚刚换了工作环境,有很多事情需要去做,所以写得比较短Q请大家见谅Q)?/span>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=505209
我们已经有了 swt Q我们用 swt 可以写出一个完整的E序来,那么我们Z么需?/span> Jface 呢?
对于q一点,本文作者(是我了Q嘿嘿)的理解是Q?/span> JFace 比只是单U地使用 swt ~程更加单,或者说Q代码量更少。毕竟,你完全可以用汇编写一个用L面,但是付出的代价似乎大了一?/span> :P ?/span>
如果你在使用 swt ~程Q那?/span> JFace 的知识ƈ?/span>是必需的:你完全可以不?/span> JFace 可以写ZQ何你需要的功能。但是如果你使用 JFace Q你必需?/span> swt 有一些了解,因ؓ JFace 需?/span> swt 的各U部件构建用L面?/span>
我觉得我们可以在某种E度上这L JFace Q它装了一部分 swt 的功能,所谓“封装”可以从几个斚w来看Q?/span>
首先Q你可以使用 JFace 的某些机制来代替 swt 中的一些机?/span>
其次Q?/span> JFace 中各U功能的实现都是依赖于底层的 swt 的?/span>
最后,你可以在使用 JFace 时候同时?/span> swt ?/span>
在这文章以后的部分Q我会向大家介l以下的内容Q?/font>
首先Q我会从一个简单的CZE序开始展C如何开始写一?/span> JFace E序
之后我会向大家介l?/span> JFace 的事件模型(?/span> swt 的事件模型不同)
然后我会向大家介l与构徏 JFace 用户界面相关的一些知识?/span>
目前来讲Q因为我刚刚写到q里Q这是我所能想到的一些部分,当然Q可能在以后的文章中略有不同?/font>
在这一pd文章的第一节( http://blog.csdn.net/jayliu/archive/2005/04/29/367757.aspx Q中Q我向大家介l了一些参考资料。现在向大家再介l一在 IBM developerworks 上发现的一很好的文章Q?/span>
?/span>
eclipse Workbench
之外使用
eclipse GUI
Q这文章共有三部分Q地址列在下面Q?/span>
http://www-128.ibm.com/developerworks/cn/linux/opensource/os-ecgui1/index.html
http://www-128.ibm.com/developerworks/cn/linux/opensource/os-ecgui2/index.html
http://www-128.ibm.com/developerworks/cn/linux/opensource/os-ecgui3/index.html
关于如何配置~程环境Q可以参照这一pd文章的第一( http://blog.csdn.net/jayliu/archive/2005/04/29/367757.aspx Q,在这里我不再赘述?/span>
如果你有什么意见,可以直接在我?/span>
blog(
http://blog.csdn.net.jayliu
)
留言Q或者给我发
email:
mailto:jayliu@mail.csdn.net
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=387461
?/span>
eclipse
中,你可以?/span>
Visual Editor
来进行拖攑ּ的图形界面设计。实际上我觉得在q一斚w大家应该可以很容易上手?/span>
如果你安装了
VE
的话Q在新徏一?/span>
swt
工程的时候你可以省好多力气了:你不需要找那些名字
n
长的
jar
Q然后一个一个导入工E的
build path
里面Q而是仅仅需要添加一?/span>
User Library
Q就像下面图CZP
?/span>
7
你可以新Z?/span>
Visual Class
?/span>
?
之后可以?/span> VE q行可视化的~辑了:
?/span> 9
关于
VE
的具体应用,我在q里不作具体介绍(说实话,我觉得用hq是比较单的Q,如果你觉得实在有必要看一详l的指南的话Q可以参照这文章:
Extending The Visual Editor
Tutorial: Enabling support for a custom widget
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=376043
我们在前面在一些例子中已经使用q?/span> Layout 了。那?/span> Layout 到底是做什么的呢?
我们知道Q在设计用户界面时候,我们可以采用的一U办法是手动的ؓ每个部g讄合适当大小和位|。但是这L话,如果你所要显C的部g比较多,~程量就会非常大Q特别是考虑到窗体大变化时候各U部件的重绘。而实际上Q我们可以利用一些通用的规则或者说法来安排这些部件的排列。比如下图所C的q个H体Q?/font>
?/span>
10
很显Ӟ对于q些规则化的部g排列Q应该有一些更单的办法Q而不是在代码的各个部分写
xxx.setBounds
之类?/span>
swt
l我们提供了q样的办法,是使用
Layout
?/span>
你可以把一?/span>
Layout
看成是安排部件位|和大小的一个规则,在应用了
Layout
?/span>
Composite
Q我们在q里W一ơ提C
Composite
Q?/span>
Composite
是一个能够包含其他控件的容器Q比?/span>
Shell
是一?/span>
Composite
Q我们会在后面的部分详细介绍
Composite
Q中Q所有的子控仉会按照这个规则来q行排列?/span>
在目前(写这文章的时?/span> eclipse 最新版本是 3.1M7 Q, org.eclipse.swt.layout 包中包含四种已经定义好的 Layout Q它们分别是Q?/span> FillLayout Q?/span> FormLayou Q?/span> GridLayout ?/span> RowLayout 。我在这里不再一一作介l,而是推荐大家看一下这文章?/span> Understanding Layouts in SWT 》。相信如果你有兴看完它的话Q就会对 Layout 有比较深的了解?/span>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=376421