??xml version="1.0" encoding="utf-8" standalone="yes"?>精品国产亚洲男女在线线电影 ,久久亚洲AV无码精品色午夜,亚洲性色成人av天堂http://m.tkk7.com/sharkafeng/category/13271.htmlFocus on Eclipse Tools.zh-cnWed, 28 Feb 2007 07:43:02 GMTWed, 28 Feb 2007 07:43:02 GMT60SWT/Jface开发入门指?十一) Q{Q?/title><link>http://m.tkk7.com/sharkafeng/articles/59273.html</link><dc:creator>The Spark of Thinking</dc:creator><author>The Spark of Thinking</author><pubDate>Thu, 20 Jul 2006 10:16:00 GMT</pubDate><guid>http://m.tkk7.com/sharkafeng/articles/59273.html</guid><wfw:comment>http://m.tkk7.com/sharkafeng/comments/59273.html</wfw:comment><comments>http://m.tkk7.com/sharkafeng/articles/59273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/sharkafeng/comments/commentRss/59273.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/sharkafeng/services/trackbacks/59273.html</trackback:ping><description><![CDATA[ <div id="6meewoe" class="postText" twffan="done"> <h1 style="MARGIN: 11pt 0cm"> <span twffan="done"> <font size="3"> <font style="BACKGROUND-COLOR: #e5e5e5">JFace中的工具条和菜单 <p></p></font> </font> </span> </h1> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">前一节中我们单介l了一?/span> <span lang="EN-US" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">。其实所谓的</span> <span lang="EN-US" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">是一个最常用的事Ӟ举个例子来说Q对于一个按钮来说它可以有多个事Ӟ比如按键Q焦点,鼠标Q等{等{吧Q但是实际上在用程序的时候,我们最兛_的,是按下去这个按钮会发生什么,q个其实是所谓的</span> <span lang="EN-US" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">。如果大家以前做q?/span> <span lang="EN-US" twffan="done">swing/awt</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">变成的话Q应该对</span> <span lang="EN-US" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">不会陌生?/span> </font> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">?/span> <span lang="EN-US" twffan="done">JFace</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">里面Q一?/span> <span lang="EN-US" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">可以对应多个</span> <span lang="EN-US" twffan="done">GUI</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">对象Q这些对象就是所谓的</span> <span lang="EN-US" twffan="done">Contribution Item</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">。比如我们在一般程序里面很常见的“文件”菜单,下面都会有“新建”,“保存”等{。同时我们可以在工具条上攄相应的按钮,那么q些都是有相同的功能Q在</span> <span lang="EN-US" twffan="done">JFace</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">里面我们可以只写一?/span> <span lang="EN-US" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">Q然后把它映到不同?/span> <span lang="EN-US" twffan="done">ContributionItem</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">去,而不必ؓ每个部g都写一串处理事件?/span> </font> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">我们下面q是通过一个简单的例子来说明,?/span> <span lang="EN-US" twffan="done">JFace</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">中怎么使用菜单和工hq两U最基本也是最有用?/span> <span lang="EN-US" twffan="done">Contribution Item</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">?/span> </font> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">我们q个E序写得很傻Q就是一个光U秃的窗口上做了一个菜单和工具条按钮,功能也只有一个,是每次点一下,弹Z个输入框来问你名字是什么,然后昄一?/span> <span lang="EN-US" twffan="done">Hello, xxx</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">之类的?/span> </font> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">首先我们q是来写一?/span> <span lang="EN-US" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">c:<br /><br /><p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt" align="center"></p></span> </font> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt" align="center"> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt" align="center"> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt" align="center"> </p> <p> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee" twffan="done"> <span style="COLOR: #008080" twffan="done"> 1</span> <span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done"> 2</span> <span style="COLOR: #000000" twffan="done"></span><span style="COLOR: #0000ff" twffan="done">public</span><span style="COLOR: #000000" twffan="done"> </span><span style="COLOR: #0000ff" twffan="done">class</span><span style="COLOR: #000000" twffan="done"> SayHiAction </span><span style="COLOR: #0000ff" twffan="done">extends</span><span style="COLOR: #000000" twffan="done"> Action {<br /></span><span style="COLOR: #008080" twffan="done"> 3</span> <span style="COLOR: #000000" twffan="done">    </span><span style="COLOR: #0000ff" twffan="done">private</span><span style="COLOR: #000000" twffan="done"> Shell shell;<br /></span><span style="COLOR: #008080" twffan="done"> 4</span> <span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done"> 5</span> <span style="COLOR: #000000" twffan="done">    </span><span style="COLOR: #0000ff" twffan="done">public</span><span style="COLOR: #000000" twffan="done"> SayHiAction(Shell shell) {<br /></span><span style="COLOR: #008080" twffan="done"> 6</span> <span style="COLOR: #000000" twffan="done">        </span><span style="COLOR: #0000ff" twffan="done">super</span><span style="COLOR: #000000" twffan="done">();<br /></span><span style="COLOR: #008080" twffan="done"> 7</span> <span style="COLOR: #000000" twffan="done">        </span><span style="COLOR: #0000ff" twffan="done">this</span><span style="COLOR: #000000" twffan="done">.shell </span><span style="COLOR: #000000" twffan="done">=</span><span style="COLOR: #000000" twffan="done"> shell;<br /></span><span style="COLOR: #008080" twffan="done"> 8</span> <span style="COLOR: #000000" twffan="done">        </span><span style="COLOR: #0000ff" twffan="done">this</span><span style="COLOR: #000000" twffan="done">.setText(</span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">Say&Hi@Ctrl+H</span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">);<br /></span><span style="COLOR: #008080" twffan="done"> 9</span> <span style="COLOR: #000000" twffan="done">    }<br /></span><span style="COLOR: #008080" twffan="done">10</span> <span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done">11</span> <span style="COLOR: #000000" twffan="done">    @Override<br /></span><span style="COLOR: #008080" twffan="done">12</span> <span style="COLOR: #000000" twffan="done">    </span><span style="COLOR: #0000ff" twffan="done">public</span><span style="COLOR: #000000" twffan="done"> </span><span style="COLOR: #0000ff" twffan="done">void</span><span style="COLOR: #000000" twffan="done"> run() {<br /></span><span style="COLOR: #008080" twffan="done">13</span> <span style="COLOR: #000000" twffan="done">        InputDialog input </span><span style="COLOR: #000000" twffan="done">=</span><span style="COLOR: #000000" twffan="done"> </span><span style="COLOR: #0000ff" twffan="done">new</span><span style="COLOR: #000000" twffan="done"> InputDialog(shell, </span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">Input your name</span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">,<br /></span><span style="COLOR: #008080" twffan="done">14</span> <span style="COLOR: #000000" twffan="done">                </span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">Please input your name here:</span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">, </span><span style="COLOR: #0000ff" twffan="done">null</span><span style="COLOR: #000000" twffan="done">, </span><span style="COLOR: #0000ff" twffan="done">null</span><span style="COLOR: #000000" twffan="done">);<br /></span><span style="COLOR: #008080" twffan="done">15</span> <span style="COLOR: #000000" twffan="done">        </span><span style="COLOR: #0000ff" twffan="done">if</span><span style="COLOR: #000000" twffan="done"> (input.open() </span><span style="COLOR: #000000" twffan="done">==</span><span style="COLOR: #000000" twffan="done"> Window.OK) {<br /></span><span style="COLOR: #008080" twffan="done">16</span> <span style="COLOR: #000000" twffan="done">            MessageDialog.openInformation(shell, </span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">Hello</span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">, </span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">Hello, </span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done">17</span> <span style="COLOR: #000000" twffan="done">                    </span><span style="COLOR: #000000" twffan="done">+</span><span style="COLOR: #000000" twffan="done"> input.getValue() </span><span style="COLOR: #000000" twffan="done">+</span><span style="COLOR: #000000" twffan="done"> </span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">!</span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">);<br /></span><span style="COLOR: #008080" twffan="done">18</span> <span style="COLOR: #000000" twffan="done">        }<br /></span><span style="COLOR: #008080" twffan="done">19</span> <span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done">20</span> <span style="COLOR: #000000" twffan="done">    }<br /></span><span style="COLOR: #008080" twffan="done">21</span> <span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done">22</span> <span style="COLOR: #000000" twffan="done">}<br /></span><span style="COLOR: #008080" twffan="done">23</span> <span style="COLOR: #000000" twffan="done"></span></div> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt" align="center"> <br /> <br /> <em> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">代码D?/span> <font face="宋体, MS Song"> <span lang="EN-US" twffan="done"> <span style="mso-no-proof: yes" twffan="done">17</span> </span> </font> </font> </em> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">q只是一个很单的</span> <span lang="EN-US" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">c,没有太多可说的?/span> </font> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">然后我们创徏一?/span> <span lang="EN-US" twffan="done">ApplicationWindow</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">c:<br /><br /></span> </font> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <span lang="EN-US" twffan="done"> <p> <font size="2"> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> </font> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> </span> </p> <p> </p> <p> <font size="2"> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> </font> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p> </p> <p> <font size="2"> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> </font> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p> </p> <p> <font size="2"> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> </font> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee" twffan="done"> <span style="COLOR: #008080" twffan="done"> 1</span> <span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done"> 2</span> <span style="COLOR: #000000" twffan="done"></span><span style="COLOR: #0000ff" twffan="done">public</span><span style="COLOR: #000000" twffan="done"> </span><span style="COLOR: #0000ff" twffan="done">class</span><span style="COLOR: #000000" twffan="done"> Hiyou </span><span style="COLOR: #0000ff" twffan="done">extends</span><span style="COLOR: #000000" twffan="done"> ApplicationWindow {<br /></span><span style="COLOR: #008080" twffan="done"> 3</span> <span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done"> 4</span> <span style="COLOR: #000000" twffan="done">    </span><span style="COLOR: #0000ff" twffan="done">private</span><span style="COLOR: #000000" twffan="done"> SayHiAction hiaction;<br /></span><span style="COLOR: #008080" twffan="done"> 5</span> <span style="COLOR: #000000" twffan="done">    </span><span style="COLOR: #0000ff" twffan="done">public</span><span style="COLOR: #000000" twffan="done"> Hiyou(Shell parentShell) {<br /></span><span style="COLOR: #008080" twffan="done"> 6</span> <span style="COLOR: #000000" twffan="done">        </span><span style="COLOR: #0000ff" twffan="done">super</span><span style="COLOR: #000000" twffan="done">(parentShell);<br /></span><span style="COLOR: #008080" twffan="done"> 7</span> <span style="COLOR: #000000" twffan="done">        hiaction</span><span style="COLOR: #000000" twffan="done">=</span><span style="COLOR: #0000ff" twffan="done">new</span><span style="COLOR: #000000" twffan="done"> SayHiAction(getShell());<br /></span><span style="COLOR: #008080" twffan="done"> 8</span> <span style="COLOR: #000000" twffan="done">        addMenuBar();<br /></span><span style="COLOR: #008080" twffan="done"> 9</span> <span style="COLOR: #000000" twffan="done">        addToolBar(SWT.FLAT </span><span style="COLOR: #000000" twffan="done">|</span><span style="COLOR: #000000" twffan="done"> SWT.WRAP);<br /></span><span style="COLOR: #008080" twffan="done">10</span> <span style="COLOR: #000000" twffan="done">    }<br /></span><span style="COLOR: #008080" twffan="done">11</span> <span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done">12</span> <span style="COLOR: #000000" twffan="done">    @Override<br /></span><span style="COLOR: #008080" twffan="done">13</span> <span style="COLOR: #000000" twffan="done">    </span><span style="COLOR: #0000ff" twffan="done">protected</span><span style="COLOR: #000000" twffan="done"> ToolBarManager createToolBarManager(</span><span style="COLOR: #0000ff" twffan="done">int</span><span style="COLOR: #000000" twffan="done"> style) {<br /></span><span style="COLOR: #008080" twffan="done">14</span> <span style="COLOR: #000000" twffan="done">        ToolBarManager toolbar</span><span style="COLOR: #000000" twffan="done">=</span><span style="COLOR: #0000ff" twffan="done">new</span><span style="COLOR: #000000" twffan="done"> ToolBarManager();<br /></span><span style="COLOR: #008080" twffan="done">15</span> <span style="COLOR: #000000" twffan="done">        toolbar.add(hiaction);<br /></span><span style="COLOR: #008080" twffan="done">16</span> <span style="COLOR: #000000" twffan="done">        </span><span style="COLOR: #0000ff" twffan="done">return</span><span style="COLOR: #000000" twffan="done"> toolbar;<br /></span><span style="COLOR: #008080" twffan="done">17</span> <span style="COLOR: #000000" twffan="done">    }<br /></span><span style="COLOR: #008080" twffan="done">18</span> <span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done">19</span> <span style="COLOR: #000000" twffan="done">    @Override<br /></span><span style="COLOR: #008080" twffan="done">20</span> <span style="COLOR: #000000" twffan="done">    </span><span style="COLOR: #0000ff" twffan="done">protected</span><span style="COLOR: #000000" twffan="done"> MenuManager createMenuManager() {<br /></span><span style="COLOR: #008080" twffan="done">21</span> <span style="COLOR: #000000" twffan="done">        MenuManager menubar</span><span style="COLOR: #000000" twffan="done">=</span><span style="COLOR: #0000ff" twffan="done">new</span><span style="COLOR: #000000" twffan="done"> MenuManager();<br /></span><span style="COLOR: #008080" twffan="done">22</span> <span style="COLOR: #000000" twffan="done">        MenuManager fileMenu</span><span style="COLOR: #000000" twffan="done">=</span><span style="COLOR: #0000ff" twffan="done">new</span><span style="COLOR: #000000" twffan="done"> MenuManager(</span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">&File</span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">);<br /></span><span style="COLOR: #008080" twffan="done">23</span> <span style="COLOR: #000000" twffan="done">        fileMenu.add(hiaction);<br /></span><span style="COLOR: #008080" twffan="done">24</span> <span style="COLOR: #000000" twffan="done">        menubar.add(fileMenu);<br /></span><span style="COLOR: #008080" twffan="done">25</span> <span style="COLOR: #000000" twffan="done">        </span><span style="COLOR: #0000ff" twffan="done">return</span><span style="COLOR: #000000" twffan="done"> menubar;<br /></span><span style="COLOR: #008080" twffan="done">26</span> <span style="COLOR: #000000" twffan="done">    }<br /></span><span style="COLOR: #008080" twffan="done">27</span> <span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done">28</span> <span style="COLOR: #000000" twffan="done">    </span><span style="COLOR: #008000" twffan="done">/**</span><span style="COLOR: #008000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done">29</span> <span style="COLOR: #008000" twffan="done">     * </span><span style="COLOR: #808080" twffan="done">@param</span><span style="COLOR: #008000" twffan="done"> args<br /></span><span style="COLOR: #008080" twffan="done">30</span> <span style="COLOR: #008000" twffan="done">     </span><span style="COLOR: #008000" twffan="done">*/</span><span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done">31</span> <span style="COLOR: #000000" twffan="done">    </span><span style="COLOR: #0000ff" twffan="done">public</span><span style="COLOR: #000000" twffan="done"> </span><span style="COLOR: #0000ff" twffan="done">static</span><span style="COLOR: #000000" twffan="done"> </span><span style="COLOR: #0000ff" twffan="done">void</span><span style="COLOR: #000000" twffan="done"> main(String[] args) {<br /></span><span style="COLOR: #008080" twffan="done">32</span> <span style="COLOR: #000000" twffan="done">        Hiyou window</span><span style="COLOR: #000000" twffan="done">=</span><span style="COLOR: #0000ff" twffan="done">new</span><span style="COLOR: #000000" twffan="done"> Hiyou(</span><span style="COLOR: #0000ff" twffan="done">null</span><span style="COLOR: #000000" twffan="done">);<br /></span><span style="COLOR: #008080" twffan="done">33</span> <span style="COLOR: #000000" twffan="done">        window.setBlockOnOpen(</span><span style="COLOR: #0000ff" twffan="done">true</span><span style="COLOR: #000000" twffan="done">);<br /></span><span style="COLOR: #008080" twffan="done">34</span> <span style="COLOR: #000000" twffan="done">        window.open();<br /></span><span style="COLOR: #008080" twffan="done">35</span> <span style="COLOR: #000000" twffan="done">        Display.getCurrent().dispose();<br /></span><span style="COLOR: #008080" twffan="done">36</span> <span style="COLOR: #000000" twffan="done">    }<br /></span><span style="COLOR: #008080" twffan="done">37</span> <span style="COLOR: #000000" twffan="done"><br /></span><span style="COLOR: #008080" twffan="done">38</span> <span style="COLOR: #000000" twffan="done">}<br /></span><span style="COLOR: #008080" twffan="done">39</span> <span style="COLOR: #000000" twffan="done"></span></div> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p class="MsoCaption" style="MARGIN: 3pt 0cm 11pt 90pt; TEXT-ALIGN: center" align="center"> <em> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">代码D?/span> <span lang="EN-US" twffan="done"> <span style="mso-no-proof: yes" twffan="done">18</span> </span> </font> </em> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">大家可能已经注意CQ在q里面我们重载了</span> <span lang="EN-US" twffan="done">createMenuManager</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">createToolBarManager</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">两个ҎQ它们的用途就和名字一P一个是用来创徏菜单的,一个是用来创徏工具条的。重载了q两个方法以后,通过在构造函C调用</span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">addMenuBar</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">addToolBar</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">让工h和菜单显C出来?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done"> <p> </p> </span> </font> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">q里值得一提的?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">MenuManager</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">ToolBarManager</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">c,如果大家M?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">API</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">文的话会发现它们都是所谓的</span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">contribution manager</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">Q实C</span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">IConntributionManager</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">接口Q,你可以通过q些</span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">contribution manager</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">来实现对特定lg的管理(d删除{等Q?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done"> <p> </p> </span> </font> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">具体到菜单的创徏Q看了我们上面的代码很明白了,q接调用相?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">MenuManager</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">add</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">Ҏ?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">d上就可以了?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">JFace</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">会自动找到这?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">getText</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">Ҏ讄菜单的文字。如果是有好几层菜单Q那么只要在重新</span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">new</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">一?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">MenuManager</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">d到已有的</span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">MenuManager</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">里面可以了。就象前面代码中的:<br /><br /></span> </font> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done"> <p> </p> </span> </font> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee" twffan="done"> <span style="COLOR: #000000" twffan="done">menubar.add(fileMenu);</span> </div> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <br /> <br /> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">至于工具条就更简单了Q创Z?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">ToolBarManager</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">然后直接</span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">add</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">对应?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'" twffan="done">可以了?/span> <span lang="EN-US" style="FONT-FAMILY: 'Courier New'" twffan="done"> <p> </p> </span> </font> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <h2 style="MARGIN: 7pt 0cm 0pt 54pt"> <font size="3"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia" twffan="done">d图标</span> <span lang="EN-US" style="FONT-FAMILY: Georgia" twffan="done"> <p> </p> </span> </font> </h2> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">如果菜单只是文字q没有什么,如果你的工具条都是文字是不是会显得干巴巴的?其实只要我们?/span> <span lang="EN-US" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">讄</span> <span lang="EN-US" twffan="done">ImageDescriptor</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">可以了Q比如你可以自己M个图标保存到</span> <span lang="EN-US" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">的包下面Q我M一?/span> <span lang="EN-US" twffan="done">hi.gif</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">Q,然后?/span> <span lang="EN-US" twffan="done">Action</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">的构造函数改写成q样Q?br /><br /><p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"></p></span> </font> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <p> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee" twffan="done"> <span style="COLOR: #0000ff" twffan="done">public</span> <span style="COLOR: #000000" twffan="done"> SayHiAction(Shell shell) {<br />        </span> <span style="COLOR: #0000ff" twffan="done">super</span> <span style="COLOR: #000000" twffan="done">();<br />        </span> <span style="COLOR: #0000ff" twffan="done">this</span> <span style="COLOR: #000000" twffan="done">.shell </span> <span style="COLOR: #000000" twffan="done">=</span> <span style="COLOR: #000000" twffan="done"> shell;<br />        </span> <span style="COLOR: #0000ff" twffan="done">this</span> <span style="COLOR: #000000" twffan="done">.setText(</span> <span style="COLOR: #000000" twffan="done">"</span> <span style="COLOR: #000000" twffan="done">Say&Hi@Ctrl+H</span> <span style="COLOR: #000000" twffan="done">"</span> <span style="COLOR: #000000" twffan="done">);<br />        </span> <span style="COLOR: #0000ff" twffan="done">this</span> <span style="COLOR: #000000" twffan="done">.setImageDescriptor(ImageDescriptor.createFromFile(</span> <span style="COLOR: #0000ff" twffan="done">this</span> <span style="COLOR: #000000" twffan="done">.getClass(),<br />                </span> <span style="COLOR: #000000" twffan="done">"</span> <span style="COLOR: #000000" twffan="done">hi.gif</span> <span style="COLOR: #000000" twffan="done">"</span> <span style="COLOR: #000000" twffan="done">));<br />    }</span> </div> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <br /> <br /> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">大家注意最后一句话Q就是ؓ</span> <span lang="EN-US" twffan="done"> <font face="宋体, MS Song">action</font> </span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">讄图标的。然后再q行一下就会发现菜单和工具栏都有图标了?/span> </font> </p> <p class="MsoBodyText" style="MARGIN: 0cm 0cm 11pt 54pt"> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">在这里给一个社区做个广告,大家可以登陆到在中国</span> <span lang="EN-US" twffan="done"> <a title="" target="_blank">eclipse</a> </span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">C֌Q?/span> <span lang="EN-US" twffan="done"> <a >http://www.eclipseworld.org</a> </span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">Q,在那里你也可以找到很多的帮助和支持,当然Q你也可以在那里扑ֈ我?/span> </font> <span lang="EN-US" twffan="done"> <p> </p> </span> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <br /> <br /> <p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=523860</p> </div> <div id="sa80yia" class="postFoot" twffan="done"> <script src="http://localhost:82/PromoteIcon.aspx?id=523860"> </script> [<a href="javascript:StorePage()">点击此处收藏本文</a>]   qd表于 2005q?1?6?13:12:00 </div> <img src ="http://m.tkk7.com/sharkafeng/aggbug/59273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/sharkafeng/" target="_blank">The Spark of Thinking</a> 2006-07-20 18:16 <a href="http://m.tkk7.com/sharkafeng/articles/59273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT/JFace开发入门指南(十)(?http://m.tkk7.com/sharkafeng/articles/59272.htmlThe Spark of ThinkingThe Spark of ThinkingThu, 20 Jul 2006 10:13:00 GMThttp://m.tkk7.com/sharkafeng/articles/59272.htmlhttp://m.tkk7.com/sharkafeng/comments/59272.htmlhttp://m.tkk7.com/sharkafeng/articles/59272.html#Feedback0http://m.tkk7.com/sharkafeng/comments/commentRss/59272.htmlhttp://m.tkk7.com/sharkafeng/services/trackbacks/59272.html

JFace中的事g模式

大家好,因ؓ工作的事情搞了一个多月,现在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>

什么是 Action

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>

 1 public class HelloAction extends Action{
 2     private Shell shell;
 3     
 4     public HelloAction(Shell shell) {    
 5         super("&Hello",Action.AS_PUSH_BUTTON);
 6         this.shell=shell;
 7     }
 8 
 9 
10     @Override
11     public void run() {
12         MessageDialog.openInformation(shell, "Hello""Hello,Action!");
13     }
14     
15 }
16 


代码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 />

 1 
 2 public class HelloJface extends ApplicationWindow {      
 3     public HelloJface(Shell shell) {
 4         super(shell);
 5     }
 6       @Override
 7     protected Control createContents(Composite parent) {
 8           HelloAction action=new HelloAction(parent.getShell());
 9           ActionContributionItem aci=new ActionContributionItem(action);
10           aci.fill(parent);
11           return parent;
12    }  
13    /**
14     * @param args
15     */
16    public static void main(String[] args) {
17 
18        HelloJface demo = new HelloJface(null);
19        demo.setBlockOnOpen(true);
20        demo.open();
21        Display.getCurrent().dispose();
22 
23    }
24 }


代码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



The Spark of Thinking 2006-07-20 18:13 发表评论
]]>
SWT/JFace开发入门指南(九)http://m.tkk7.com/sharkafeng/articles/59270.htmlThe Spark of ThinkingThe Spark of ThinkingThu, 20 Jul 2006 10:09:00 GMThttp://m.tkk7.com/sharkafeng/articles/59270.htmlhttp://m.tkk7.com/sharkafeng/comments/59270.htmlhttp://m.tkk7.com/sharkafeng/articles/59270.html#Feedback0http://m.tkk7.com/sharkafeng/comments/commentRss/59270.htmlhttp://m.tkk7.com/sharkafeng/services/trackbacks/59270.html阅读全文

The Spark of Thinking 2006-07-20 18:09 发表评论
]]>
SWT/JFace开发入门指南(七) (?http://m.tkk7.com/sharkafeng/articles/59268.htmlThe Spark of ThinkingThe Spark of ThinkingThu, 20 Jul 2006 10:08:00 GMThttp://m.tkk7.com/sharkafeng/articles/59268.htmlhttp://m.tkk7.com/sharkafeng/comments/59268.htmlhttp://m.tkk7.com/sharkafeng/articles/59268.html#Feedback0http://m.tkk7.com/sharkafeng/comments/commentRss/59268.htmlhttp://m.tkk7.com/sharkafeng/services/trackbacks/59268.html阅读全文

The Spark of Thinking 2006-07-20 18:08 发表评论
]]>
SWT/JFace开发入门指南(八)(?http://m.tkk7.com/sharkafeng/articles/59269.htmlThe Spark of ThinkingThe Spark of ThinkingThu, 20 Jul 2006 10:08:00 GMThttp://m.tkk7.com/sharkafeng/articles/59269.htmlhttp://m.tkk7.com/sharkafeng/comments/59269.htmlhttp://m.tkk7.com/sharkafeng/articles/59269.html#Feedback0http://m.tkk7.com/sharkafeng/comments/commentRss/59269.htmlhttp://m.tkk7.com/sharkafeng/services/trackbacks/59269.html

JFace 以及其他

关于 JFace Q一个简单的介绍

我们已经有了 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结?/font>

在这文章以后的部分Q我会向大家介l以下的内容Q?/font>

首先Q我会从一个简单的CZE序开始展C如何开始写一?/span> JFace E序

之后我会向大家介l?/span> JFace 的事件模型(?/span> swt 的事件模型不同)

然后我会向大家介l与构徏 JFace 用户界面相关的一些知识?/span>

目前来讲Q因为我刚刚写到q里Q这是我所能想到的一些部分,当然Q可能在以后的文章中略有不同?/font>

另外的参考资?/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

环境的配|?/font>

关于如何配置~程环境Q可以参照这一pd文章的第一( http://blog.csdn.net/jayliu/archive/2005/04/29/367757.aspx Q,在这里我不再赘述?/span>

FeedBack

如果你有什么意见,可以直接在我?/span> blog( http://blog.csdn.net.jayliu ) 留言Q或者给我发 email: mailto:jayliu@mail.csdn.net



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=387461



]]>
SWT/JFace开发入门指南(五) (?http://m.tkk7.com/sharkafeng/articles/59266.htmlThe Spark of ThinkingThe Spark of ThinkingThu, 20 Jul 2006 10:07:00 GMThttp://m.tkk7.com/sharkafeng/articles/59266.htmlhttp://m.tkk7.com/sharkafeng/comments/59266.htmlhttp://m.tkk7.com/sharkafeng/articles/59266.html#Feedback0http://m.tkk7.com/sharkafeng/comments/commentRss/59266.htmlhttp://m.tkk7.com/sharkafeng/services/trackbacks/59266.html

使用 Visual Editor 加速你的开?/span>

?/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



]]>
SWT/JFace开发入门指南(六) (?http://m.tkk7.com/sharkafeng/articles/59267.htmlThe Spark of ThinkingThe Spark of ThinkingThu, 20 Jul 2006 10:07:00 GMThttp://m.tkk7.com/sharkafeng/articles/59267.htmlhttp://m.tkk7.com/sharkafeng/comments/59267.htmlhttp://m.tkk7.com/sharkafeng/articles/59267.html#Feedback0http://m.tkk7.com/sharkafeng/comments/commentRss/59267.htmlhttp://m.tkk7.com/sharkafeng/services/trackbacks/59267.html

使用 Layout UI 布局

我们在前面在一些例子中已经使用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



]]>
SWT/JFace开发入门指南(四)(?http://m.tkk7.com/sharkafeng/articles/59261.htmlThe Spark of ThinkingThe Spark of ThinkingThu, 20 Jul 2006 09:59:00 GMThttp://m.tkk7.com/sharkafeng/articles/59261.htmlhttp://m.tkk7.com/sharkafeng/comments/59261.htmlhttp://m.tkk7.com/sharkafeng/articles/59261.html#Feedback0http://m.tkk7.com/sharkafeng/comments/commentRss/59261.htmlhttp://m.tkk7.com/sharkafeng/services/trackbacks/59261.html阅读全文

]]>
SWT/JFace开发入门指南(三)(?http://m.tkk7.com/sharkafeng/articles/59260.htmlThe Spark of ThinkingThe Spark of ThinkingThu, 20 Jul 2006 09:53:00 GMThttp://m.tkk7.com/sharkafeng/articles/59260.htmlhttp://m.tkk7.com/sharkafeng/comments/59260.htmlhttp://m.tkk7.com/sharkafeng/articles/59260.html#Feedback0http://m.tkk7.com/sharkafeng/comments/commentRss/59260.htmlhttp://m.tkk7.com/sharkafeng/services/trackbacks/59260.html阅读全文

]]>
SWT/JFace开发入门指南(二)(转蝲)http://m.tkk7.com/sharkafeng/articles/59254.htmlThe Spark of ThinkingThe Spark of ThinkingThu, 20 Jul 2006 09:32:00 GMThttp://m.tkk7.com/sharkafeng/articles/59254.htmlhttp://m.tkk7.com/sharkafeng/comments/59254.htmlhttp://m.tkk7.com/sharkafeng/articles/59254.html#Feedback0http://m.tkk7.com/sharkafeng/comments/commentRss/59254.htmlhttp://m.tkk7.com/sharkafeng/services/trackbacks/59254.html阅读全文

]]>
SWT/JFace开发入门指南(一Q?转蝲)http://m.tkk7.com/sharkafeng/articles/59253.htmlThe Spark of ThinkingThe Spark of ThinkingThu, 20 Jul 2006 09:31:00 GMThttp://m.tkk7.com/sharkafeng/articles/59253.htmlhttp://m.tkk7.com/sharkafeng/comments/59253.htmlhttp://m.tkk7.com/sharkafeng/articles/59253.html#Feedback0http://m.tkk7.com/sharkafeng/comments/commentRss/59253.htmlhttp://m.tkk7.com/sharkafeng/services/trackbacks/59253.html阅读全文

]]>
Eclipse插g开发之新手入门 http://m.tkk7.com/sharkafeng/articles/59214.htmlThe Spark of ThinkingThe Spark of ThinkingThu, 20 Jul 2006 07:54:00 GMThttp://m.tkk7.com/sharkafeng/articles/59214.htmlhttp://m.tkk7.com/sharkafeng/comments/59214.htmlhttp://m.tkk7.com/sharkafeng/articles/59214.html#Feedback0http://m.tkk7.com/sharkafeng/comments/commentRss/59214.htmlhttp://m.tkk7.com/sharkafeng/services/trackbacks/59214.html
  会用eclipse来开发java应用E序

  了解插gq个词的概念

  了解一些xml的知?本文是一个入门的文章Q只是向大家说明开发一个插件的单步骤,同时了解在开发插件时涉及到的技术面会有哪些?

  eclipse sdk概述

  我们通常使用的eclipse也就是我们这里所说的eclipse sdkQ这个sdk中包括了很多的内容,如下图所C:




  q行时核?eclipse platform) - sdk必须一个eclipse platformQ它自n不具有Q何对最l用h意义的功能, 它是一个加载所有插件的基础q_。也是eclipse的运行时最集合了?

  java 开发工?jdt) - 我们所有的有关java的开发部分都是由q个插g来完成了Q它形成了对于java最为基的编辑?~译、运行、调试、发布的环境?

  插g开发者环?pde) - 开发插件的插gQ我们如果要开发插件哪么我们就会发现所有的工作环境都是由它来提供的?它提供了用来自动创徏、处理、调试和部v插g的工兗?

  我们来要开发的插g都是由^台来加蝲和运行,而pde则是开发插件的开发环境,jdt则是开发插件时的java代码的开发环境?

  创徏插g目

  讄引用目

  开发插件时需要大量的外部库,q些外部库主要是现有的eclipse中各个插件所提供的库?Z开发方便,我们先将q些外部库由一个项目统一引用?

  从资源透视图中Q用文Ӟ导入...Q外部插件和Dc?
  在下一步中选择抽取源归档ƈ在项目中创徏源文件夹?
  到显C称为选择的屏q,选择 org.eclipse.uiQ然后单d成按钮?

  创徏目

  在eclipse需要创Z个空的插仉目,Z让我们更好的理解插g中各个文件的来源Q我们从一个空白的插g目开始:

  1) 打开新徏目...向导Q文Ӟ新徏Q项?..Qƈ从插件开发类别中选择插g目?

  2) com.huangdong.examples.helloworld用作目的名U。缺省情况下Q向D会将com.huangdong.examples.helloworld讄为标识?

  3) 最l,保在插件代码生成器面上选择了创建空白插仉目?

  4) 当询问您是否惛_换到“插件开发”透视图时Q回{是?

  5) 选择com.huangdong.examples.helloworld目q打开属性对话框?

  6) 在java构徏路径属性中Q选择目选项卡,q择目org.eclipse.ui。这些包含了目需要的导入cR?

  7) 重徏目?
   创徏一个插件内?

  创徏一个新的小视图

  下面我们目加入一个很单的视图Q?

  1) 在项目的src目录下创建包com.huangdong.examples.helloworld?

  2) 在此包中创徏UCؓhelloworldview的新cd类为org.eclipse.ui.part.viewpart?

  在helloworldview中加入以下代码:

  package com.huangdong.examples.helloworld;

  import org.eclipse.swt.swt;
  import org.eclipse.swt.widgets.composite;
  import org.eclipse.swt.widgets.label;
  import org.eclipse.ui.part.viewpart;

  public class helloworldview extends viewpart {

  label label;

  public void createpartcontrol(composite parent) {
  label = new label(parent, swt.wrap);
  label.settext("hello world");
  }

  public void setfocus() {}
  }

  我们cd义了一个变量lableQ在createpartcontrolҎ中初始化q设|了一个显C的字符丌Ӏ?

  护展扩展?

  让eclipsedq个视图Q需要扩展org.eclipse.ui.views扩展炏V所有的q些需要在plugin.xml中进行描q。该清单文g描述插gQ包括插件的代码所在的位置以及正在d的扩展?

  以下内容复制到plugin.xml中:

  Q?xml version="1.0" encoding="utf-8"?Q?
  Qplugin id="com.huangdong.examples.helloworld"
  name="com.huangdong.examples.helloworld"
  version="1.0.0"
  provider-name="huangdong"Q?

  QruntimeQ?
  Qlibrary name="helloworld.jar"/Q?
  Q?runtimeQ?
  QrequiresQ?
  Qimport plugin="org.eclipse.ui"/Q?
  Q?requiresQ?

  Qextension point="org.eclipse.ui.views"Q?
  Qcategory
  name="hello"
  id="com.huangdong.examples.helloworld.hello"Q?
  Q?categoryQ?
  Qview
  name="hello greetings"
  category="com.huangdong.examples.helloworld.hello"
  class="com.huangdong.examples.helloworld.helloworldview"
  id="com.huangdong.examples.helloworld.helloworldview"Q?
  Q?viewQ?
  Q?extensionQ?

  Q?pluginQ?


  在plugin域中定义了插件的名称、标识和版本?同时在runtime域中定义了插件代码将打包于helloworld.jar文g中?在requires域中定义了该插g所要用的依赖插gQ由于我们要使用swt api和工作台所以列CZorg.eclipse.ui?最后,在extension中说明了要们要扩展org.eclipse.ui.views扩展炏V?首先我们在category中定义了视图的类别,在工作台的显C囑֯话框中,可以使用cd来将相关的视N中在一赗我们定义的cd名ؓ“hello”?同时也定义了我们的视图,名ؓ“hello greetings”,q个视图会昄在“显C䏀对话框和视囄标题栏中Q这里我们还通过class标识来说明了实现q个视图的最l类?

  通过plugin.xml的定义,eclipse才会真正的找到插件可以做的行为,以及q些行ؓ最l实现的具体javacR?

  在插件清单文件中使用了许多标识?个别扩展炚w常会定义需要标识的配置参数Q例如,以上用于视图扩展点的cd标识Q?我们q要定义插g标识。通常Q应该对所有标识都使用 java 包名前缀Q以便确保所有已安装的插仉是唯一的?

  在前~后面使用的特定名U完全由您自己决定?然而,如果插g标识前缀刚好与其中一个包的名U相同,则应该避免在该包中用类名?否则Q将很难分L您正在查看标识名q是cd?

  q应该避免对不同的扩展配|参C用相同的标识?在上q清单中Q已l用了公共标识前缀Qcom.huangdong.examples.helloworldQ,但是Q我们的所有标识都是唯一的?此命名方法可以帮助我们阅L件ƈ了解哪些标识是相关的?

  q行和测试插?

  q行插g是一件很单的事,q些在pde中给我们提供了很好的支持?只需要在菜单中选择q行Q运行ؓQ运行时工作収ͼ在运行时会弹Z个重复插件的提示框,可以按确定蟩q,不必在意?q样会启动一个已l安装好插g的eclipse?

  启动后在菜单中选择H口Q显C图>其它Q在昄视图对话框中会有一个分cMؓhelloQ点开hello分类会看到hello greetingsQ选择后点定按钮。在最下面的视图中可以见到以下界面Q?



  到这里,如果你看Cq个图,哪么恭喜你,你的W一个eclipse插g成功q行了?br />

]]>
eclipse中的U程http://m.tkk7.com/sharkafeng/articles/59211.htmlThe Spark of ThinkingThe Spark of ThinkingThu, 20 Jul 2006 07:49:00 GMThttp://m.tkk7.com/sharkafeng/articles/59211.htmlhttp://m.tkk7.com/sharkafeng/comments/59211.htmlhttp://m.tkk7.com/sharkafeng/articles/59211.html#Feedback0http://m.tkk7.com/sharkafeng/comments/commentRss/59211.htmlhttp://m.tkk7.com/sharkafeng/services/trackbacks/59211.html 寒假我就上网很少?真的非常不好意?eclipse中的U程是开发eclipse插g中一个比较重要的基础,而很多书上都没有?我最后抽旉写了q篇入门文章,希望对大家有帮助.

我先大致讲一讲GUIE序中的U程.
    虽然各个操作pȝ之间的线E机制是不一L,但是大致是相同的.当用户用GUIE序?如果炚w标或按下键盘上的键等?操作pȝ会生对应的GUI事g,它来军_哪个H口或程序来接受每一个事件ƈ且放到程序的事g队列?
    MGUIE序的底层结构就是一个事件@?E序首先初始化事件@?q开始@?q个循环会从事g队列依次接收GUI事gq一一做出相应的反?E序应该对事件做出快速的反应使程序一直对用户有响?举个例子,用户点了一下程序里的一个按钮结果程序就没反应了,那么q个E序应该是一个失败的E序?
    如果某个UI事g引发了某个需要长旉的事?那么应该把它攑ֈ一个另外的单独的线E中,q样E序的那个事件@环就能够马上回来响应用户的下一个操?U程是非常复杂的一个主?如果处理的不好很Ҏ造成死锁{很p糕的情?

    q好,eclipse为我们开发插件提供了一个方便的UIU程?大大的简化了很多底层复杂的东?先看看几个简单的概念.
1.SWT UIU程
SWT用的是操作系l直接支持的U程模式,E序会在ȝ序里q行一个时间@环ƈ依次在这个线E里响应事g.看下面这D代?UIU程是创徏Display的那个线E?
public static void main (String [] args) {
    Display display = new Display ();
    Shell shell = new Shell (display);
    shell.open ();
    // 开始事件@?br />    // xH口?br />    while (!shell.isDisposed ()) {
      if (!display.readAndDispatch ())
        display.sleep ();
    }
    display.dispose ();
  }
单的程序里,一个UIU程p够满需要了.
但如果是长时间的操作,你就最好不要用UIU程来做q些?可以交给Jobd.它其实就是另外启动的U程,也就是等会我要说的非UIU程.

2.Job
Jobcȝorg.eclipse.core.runtime插g提供.它能够让客户E序员轻杄在另外的U程中执行代?
看一个小例子
Job job = new Job("My First Job") {
  protected IStatus run(IProgressMonitor monitor) {
      System.out.println("Hello World (from a background job)");
      return Status.OK_STATUS;
    }
  };
job.setPriority(Job.SHORT);
job.schedule(); // start as soon as possible

Job的默认优先是Job.Long,q里例子中的优先U要比它?
只要调用Job#schedule()Q它׃快在另外的U程中运行run()中的代码.
再看一个小例子:
final Job job = new Job("Long Running Job") {
    protected IStatus run(IProgressMonitor monitor) {
      try {
        while(hasMoreWorkToDo()) {
          // do some work
          // ...
        if (monitor.isCanceled()) return Status.CANCEL_STATUS;
        }
        return Status.OK_STATUS;
      } finally {
        schedule(60000); // start again in an hour
      }
    }
  };
job.addJobChangeListener(new JobChangeAdapter() {
    public void done(IJobChangeEvent event) {
    if (event.getResult().isOK())
      postMessage("Job completed successfully");
      else
        postError("Job did not complete successfully");
    }
  });
job.setSystem(true);
  job.schedule(); // start as soon as possible

monitor 是一个进度显C条,它会在运行job时自动显C?如果d成功q行完成,q回Status.OK_STATUS,如果中途被用户在进度显C条那里中断,p回Status.CANCEL_STATUS.上面schedule(60000);它是让job每过1时p动运?Job又一个非常强大的功能.
然后后面是可以给jobd监听?
job.setSystem(true);q一句是把这个job讄为系l别的.如果调用setUser(true),那么p定义为用L别的,用户U别和默认别的job
    在运行时会以UI形式反映出来,如果是用户job,那么会弹Z个进度显C窗?能让用户选择在后台里q行.
下图是一个job自动q行时的效果:

再介ljob常常用到的一个方法Job#join().
pȝ调用到某个job,调用它的run()Ҏ:
再看下面q个例子:

  class TrivialJob extends Job {
    public TrivialJob() {
      super("Trivial Job");
    }
    public IStatus run(IProgressMonitor monitor) {
      System.out.println("This is a job");
      return Status.OK_STATUS;
    }
  }

  job的创建和计划如下所C?

  TrivialJob job = new TrivialJob();
  System.out.println("About to schedule a job");
  job.schedule();
  System.out.println("Finished scheduling a job");

  他们的执行是和时间没关系?输出可能如下:
  About to schedule a job
  This is a job
  Finished scheduling a job

也可能是:

  About to schedule a job
  Finished scheduling a job
  This is a job
 

  如果希望某个jobq行完成后在l箋?可以使用join()Ҏ.
  join()会一直阻塞到该jobq行?

例子:
  TrivialJob job = new TrivialJob();
  System.out.println("About to schedule a job");
  job.schedule();
  job.join();
  if (job.getResult().isOk())
    System.out.println("Job completed with success");
  else
    System.out.println("Job did not complete successfully");

上面的代码执行后,输出应该是q样:

  About to schedule a job
  This is a job
  Job completed with success

Job的功能是很强大的,q有很多功能我以后会介绍,也可以查阅官方帮助文?q里先把几个常用的问题解x.
参见:
http://help.eclipse.org/help30/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/runtime_jobs.htm

3.如果在Job中加上改变UI的代码就会失?
原因如下:
如果是在非UIU程中调用UI,SWT׃抛出一个SWTException.
要在一个非UIU程改变UI的话有几U技?

W一U??
Display#syncExec(Runnable)?br />Diaplay#asyncExec(Runnable)

W二U?
已经开发了另外一UJob,是UIJob,可以直接在它里面q行改变UI的代?其实它就是在SWT的asyncExec()Ҏ里运行的.所有承UIJob的类?br />
该覆写runInUIThreadҎ而不是runҎ.

3.关于q度昄
在Jface?
org.eclipse.jface.operations包定义了一些接口用来在q度条下q行长时间的d.
可以参见:
http://help.eclipse.org/help30/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/jface_operations.htm

在eclipse插g和RCP开发中:
用户U别的job是互操作性最强的,它不仅能够让用户用Cancel键取消jobQ而且可以在Detail中展C具体情?但是注意:
Detail只会在下面两U方法中出现:
IProgressService#busyCursorWhile?br />IProgressService#runInUI
1)IProgressService#busyCursorWhile的用法例?
注意q里的run()中做些和UI无关的事.
IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
  progressService.busyCursorWhile(new IRunnableWithProgress(){
    public void run(IProgressMonitor monitor) {
      //do non-UI work
    }
  });
效果:

2)IProgressService#runInUI的用法例?
注意q里的run()中可以做些和UI有关的事.
progressService.runInUI(
    PlatformUI.getWorkbench().getProgressService(),
    new IRunnableWithProgress() {
      public void run(IProgressMonitor monitor) {
        //do UI work
      }
    },
    Platform.getWorkspace().getRoot());
效果:

q里最后一个参数可以是null,或者是q个操作的规?在这里我们是讑֮q行q个UI操作旉定工作台.
更加具体的可以参?
http://help.eclipse.org/help30/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/workbench_jobs.htm

另外,有少数时?我们不想弹出一个进度条H口,而是只在最底下的状态栏昄可以了,很简?写自qJobcL,在构造方法里加上一?
setUser(false);可以了.


]]>
վ֩ģ壺 պѸƬ| ҹ޹ϼ| 1000Ƶ| ϸëƬ| Ʒҹ| AV뾫Ʒ| ɫ͵͵ۺAV| ҹҹƵۿ| 18ۿƵ| Ʒһѹۿ| պŷһ| ޸߲| ˾Ʒҹ侫պ| avֻ߹ۿ| ëƬAëƬѲ| ޹Ʒѹۿ| ٸ͵˾ƷƵ| һ| һëƬaŮ˴̼Ƶ| ŷۺһ| Ʒպ99޵߷| ϵйƷƷ˿| þ޾ƷƵ| ޹Ʒav| ޾ƷƷɫ| þþþþþ޾Ʒ| ƷV޾ƷVպƷ | ŷAVӰ߹ۿ | ƷþþþþĻ| ۺϽ| ޹91| ɫWWWŮ| ޺ݺݳۺ| ĻۺϾþۺ| AV鶹Ʒ| ˳7777Ӱ߹ۿ| ˾þô߽| ޾Ʒ456˳| ޹AVһ| ͵͵APP| ߳ѿƬ|