Getting Started 系列 - Netbeans 的 Action
来源:互联网 发布:jenkins windows 下载 编辑:程序博客网 时间:2024/06/03 12:47
Action 雖然不是什麼很特別的技巧,但是它被廣泛地應用在 Java Swing 的套件之中。我寫過許多程式語言,Java Swing Action 是我覺得 Java 當中相當經典的設計。
NetBeans 的 Action 也是因循著 Java Swing 的傳統,將它用在 Menu 、Tool Bar或是一些單一動作的功能上。只不過,NetBeans 是一個平台,它所提供的功能也相當複雜,所以,它在 Action 上的支援比起 JavaSwing 更豐富許多。我有在 NetBeans 的網站上找到一篇文章是專門介紹 Action ,若大家能接受英文的文件的話,可以參考一下– Actions API。本文章會簡單的介紹一下 NetBeans 中的各種 Action ,這部份將會與 NetBeans 上的文章類似(畢盡 NetBeans 中的Action 也就只有那幾種而已嘛)。另外,在往後的幾篇文章之中,將會一一地介紹如何設計每一種 Action 。
1. NetBeans 的 Actions
NetBeans 雖然利用了 Java 常見的 Action 功能,但是 Java Swing 的 Action 並不能滿足一個平台的需求。相信有自己開發過 RCP 平台的人都會知道這個事實。所以,NetBeans 就建立了許多不同種類的 SystemAction 來提供更多種類的應用,例如:僅提供介面的 Action 、有執行條件的 Action 。他們這樣的設計,將可以替使用 NetBeans 來開發系統的人省下不少功夫。
NetBeans 中會用到的 Actions 共分成:Java Swing Action、CallableSystemAction、CallbackSystemAction 、NodeAction、CookieAction ,五種。另外,除了這五個 Action Class 外,NetBeans 還提供建立使用者介面的 Interface 、與一些常用的小功具,在之後的內容中也會一一介紹。
2. Action 種類的介紹
a. Java Swing Action
這個類型的 Action 常被用在 TopComponent 的 getActions()
與 Node 的 getActions(boolean context)
方法之中。在早期的 NetBeans 的設計當中,這部份是使用 SystemAction 而非 Java Swing Action 。但在3.x 版後,就通通改成 Java Swing Action 了。 NetBeans 的 TopComponent 與 Node 所提供的Java Swing Action 將不會有任何的 Semantic 上的限制,或功能上的支援。所以大家僅須依照傳統設計 Java SwingAction 的方式來設計就可以了。
b. CallableSystemAction
這類型的 Action 常被用在 Main Menu 、 Tool Bar 、Popup Menu 之中,一般可以用它來提供 Main Menu 、Tool Bar 、或 Popup Menu 的使用者介面 (這是因為它實作了Presenter底下的介面)。另外,CallableSystemAction 的 enable state 是由 CallableSystemAction自己維護的,所以在實作這個類別的時候,必須注意到何時要 enable 及何時要 disable ,不然所建立出來的介面將會是 alwaysenable 的哦。一般來說,我們會使用 CallableSystemAction 來設計非常獨立且與別人沒有任何關係的功能,例如:about 、memory usage 等等。如此一來,又可以提供特殊的使用者介面,又可以讓它 always enable 。
大家可能覺得很奇怪,這種 Action 明明就是介面,跟傳統的 Java Swing Action 差異很大。一般傳統的 Java SwingAction 可以不理會呼叫它的使用者介面是什麼,就可以正常執行想要的功能就。但是, CallableSystemAction反倒很關心使用者介面是什麼。其實這是 NetBeans 中相當有彈性的擴充設計。早期,筆者在開發自己的 RCP 平台時曾經遇到以下的問題:一個Action 有想要的使用者介面該怎麼辦?因為不是每個 Action 都能接受 menu bar 或是 JButton ,它們可能會想用JComboBox 或是其它各式各樣的使用者介面。 NetBeans 的開發者也是遇到了類似的問題,所以就設計了Presenter,並用它來提供各種不同的使用者介面,這部份將會在之後的章節中有更詳細的介紹。另外,雖然 NetBeans 設計了 Presenter可以解決這個問題,但是每次實作 Action 時都要實作 Presenter 實在太麻煩了。所以 NetBeans 設計了CallableSystemAction 提供預設的實作。在 Presenter 的 javadoc中有提到,一般人要提供使用者介面的時候,大多都會實作 CallableSystemAction 哦。
c. CallbackSystemAction
大家可能會發現 CallbackSystemAction 本身是繼承 CallableSystemAction,所以它本身也可以提供使用者介面。比較特殊的地方是,CallbackSystemAction 本身僅是一個提供使用者介面的 Action,而且,NetBeans 並不建議實作 Action 的程式碼,因為它並不會被呼叫到。說到這裡,大家可能會很驚訝,居然有不會被呼叫到的Action 。NetBeans 這樣的設計也是有它的故事的。當初,筆者在設計自己的 RCP平台的時候也曾經遇到這個問題:某些使用者介面,它會隨著 focused window 的變化,而希望有不同的 semantic ,就例如Copy、Cut 、Paste 在 text-based 的 window 當中是對文字進行動作,但是在 file-based 的window 中則是對檔案進行移動、複製的行為,可是在 RCP 中 Copy 、Cut 、Paste 的 tool bar 與 menubar 都只有一個,這時 RCP 就要隨著 focused window 的變化而掛載不同的 Action 。NetBeans 設計了 ContextAwareAction 就是用來解決這個問題。同樣地, NetBeans的開發者為了簡化系統的實作,他們設計了 CallbackSystemAction 來處理這類的問題。在CallbackSystemAction 中,它會替我們維護不同 focused window 的 action binding ,我們僅須在focused window 當中提供對應的 ActionMap 物皁即可。另外,NetBeans 中一些常見的使用者介面也是利用CallbackSystemAction 實作出來的,例如: Copy、Cut、Paste、Delete、Find、Print …等。
d. NodeAction
NodeAction 故名思意可以知道它是跟 Node 有關的 Action 。關於 Node 的部份,請參考本站與 Node 有關的資訊,這裡就不再多加介紹。
NodeAction 的用法將完全與先前介紹的三種 Action 不同,它可以視為具備執行條件的 Action,當它的執行條件滿足時,它才能夠被執行。NodeAction 的執行條件其實就是檢查目前 focused window 所能提供的 Node是否滿足它內部的需求。當 focused window 改變或它提供的 Node 改變時,NodeAction 的 enable(Node[] activatedNodes)
方法就會被乎叫,以用來判斷它的執行條件是否滿足,如果滿足的話,它所對應的使用者介面就會被啟用。
NetBeans 中有不少介面是使用 NodeAction ,例如:New、…等。
e. CookieAction
CookieAction 是繼承 NodeAction 而來,它本身也是提供執行條件的 Action ,只是它不像 NodeAction 的執行條件是跟 Node 有關,它的執行條件與Node.Cookie有關。CookieAction 通常實作的時候,除了實作 Action 本身的方法外,還會實作一個 Cookie 的 interface出來,以讓 focused window 能夠提供執行的資訊。例如 NetBeans 中的 SaveAction 就是一個CookieAction ,它也提供了一個 SaveCookie 的 interface ,當我們有文件要提供儲存的時候,只要實作一個SaveCookie 並將它放到正確的物件中,SaveAction 就會被啟用。
NodeAction 與 CookieAction 同樣都是具備執行條件的 Action ,但是 CookieAction 的彈性遠比NodeAction 大上許多,所以 NetBeans 的很多功能都是用 CookieAction所實作出來,例如:Save、Open、Edit、Print …等。
NodeAction 與 CookieAction 的功能其實很強大,在還沒接觸使用它之前,大家可能無法體會它的應用。但是,在往後的文章中,將會一一使用到它們,到時,我們就更能體會它的強大了。
3. NetBeans 與 Action 有關的工具
NetBeans 開發多年,許多我們在設計 Action 時覺得很麻煩的小地方,例如設定 mnemonic 、icon …等,他們都已經設計的很完全了。以下將介紹幾個常用的且與 Action 有關的工具:
a. Actions
Actions 可以用來連結一個使用者介面與 Action 。
b. JPopupMenuUtils
JPopupMenuUtils 可以在一個 JPopupMenu 已經顯示後動態地新增一個項目,另外,它也能保證一個 JPopupMenu 顯示時,不會跑出整個電腦的螢幕外面。
c. Mnemonics
Mnemonics 是筆者非常常用的一個類別,它可以用來對 AbstractButton 、Label 建立 Mnemonic,它的用法就跟開發 VB 、或其它 MS-Windows AP 的 menu 一樣,只須加上個『 & 』符號,它就會將之後的字元設定成Mnemonic ,同時把文字設定上去。例如Save &As 就會被顯示成 Save As
本篇文章介紹了 NetBeans 的 Action 種類與一些常用的工具,在往後的文章當中,將會經常使用到這篇文章中所介紹到的工具或 Action 。
转自:http://fox.jenming.info/?p=21
- Getting Started 系列 - Netbeans 的 Action
- Getting Started 系列 - Netbeans 的 Action
- Getting Started 系列 - Netbeans 的 Action
- Getting Started 系列 - NetBeans RCP 專案(Module Project) 介紹
- Getting Started 系列 - Lookup, a service/object pool system in NetBeans
- Getting Started 系列 - CallbackSystemAction 演練
- Getting Started 系列 - 初探 CallableSystemAction
- Getting Started 系列 - Project 檔案說明
- SQLite的Getting Started
- Getting Started 系列 - layer.xml 檔案說明
- Xamarin Getting Started系列翻译一
- Xamarin Getting Started翻译系列八--许可
- Getting started
- Getting Started
- Getting Started
- Getting Started
- Getting Started
- getting started
- 理解 DOM
- 如何利用 Rational Software Architect 的工具及技巧,完成模型到文本转换
- Visual Studio 2008 Team Suite Edition的注册或破解
- 基于ARM的脑电信号采集系统
- IIS日志记录属性参考
- Getting Started 系列 - Netbeans 的 Action
- IE 下multiple select的onclick事件太土了
- IP验证之正则表达式
- 2008.08.27 多云
- 探讨SSE指令
- 看着玩
- 问题:Unique约束与ORA-08177: 无法连续访问此事务处理
- 关于if后不加括号的讨论
- Win32状态(sc-win32-status)说明