轉一篇很不錯的介紹NetBeans的文章

NetBeans 6.0 提升生產力之Swing Application Framework (JSR 296)

一篇博客介紹了NetBeans Java代碼編輯器,這一篇將介紹用NetBeans 開發基於Swing Application Framework (JSR 296) 的程序,Swing一直以來是飽受爭議的GUI庫,特別是SWT與Swing的爭論,分別體如今了Eclipse與NetBeans的爭論上。

在此,我無意討論SWT與Swing孰優孰劣,你要是真的對這個感興趣,能夠到williamchen博客裏的Swing專欄看看,該專欄博主已經對SWT和Swing分析得很是透徹:html

http://blog.sina.com.cn/swingjavajava

Swing在1998 年底做爲Java 2的一部分發布了1.0,可是當時發佈的版本不論是性能仍是外觀都足以使人失望。雖然當時Swing小組的工程師使用了最前沿的技術,如設計模式,可是時 的Swing小組已經被性能、本地化外觀一致性問題以及許多錯誤深深陷住了,這些問題幾乎把整個項目拖垮。程序員

幸好,Swing小組堅持了下來,要否則今天咱們就不會看到像NetBeans這樣的IDE了。自從JDK1.5後,Java的性能已經有了巨大的改觀,如今1.6下,Swing的性能已經徹底不是問題。數據庫

那麼Swing的優點有那些呢?設計模式

l         優秀的設計,正如剛纔所說的,Swing從九十年代中期開始設計就用了當時最前沿的開發方法學。能夠說Swing在當今各類GUI庫中,設計是很是優雅的。app

l         輕量級框架

l         官方的存在JRE中,發佈程序不須要像SWT那樣還要捆綁本身的GUI庫異步

l         真正的平臺獨立,Swing組件由Java 2D繪製編輯器

l         輕易的更改面觀模式ide

l         強大的IDE支持,如今用NetBeans作界面,幾乎不用你敲一行代碼。

l         Swing如今又多了一個殺手級框架Swing Application Framework (JSR 296)

下面開始個人第二篇Java博客

NetBeans 6.0 提升生產力之Swing Application Framework (JSR 296)

Swing Application Framework簡介

Swing Application Framework(如下簡稱SAF)致力於簡化Swing應用程序的開發,框架定義了對大多數桌面應用程序的共有的基礎設施:

l         應用程序生命週期管理,特別是GUI的啓動和關閉。

l         對資源管理和載入的支持,這些資源是字符串,格式化的消息,圖像,顏色,字體以及桌面應用程序共有的其餘類型的資源。

l         對動做定義,管理和綁定的支持,其中包含了異步運行的動做(在後臺運行)。

l         持久化會話狀態:支持自動地,有選擇地保存應用程序一次運行到下次運行的GUI狀態。好比頂層的窗口幾何位置。


用NetBeans開發SAF

SAF已經定義了大多數桌面應用程序的基礎設施,咱們能夠更方便的開發Swing程序了,可是手動編碼開發GUI仍是讓不少人抓狂。能不能提供一個像VB同樣的環境,讓程序員更加專一於功能的實現而不是界面的實現?答案是確定的,NetBeans 6.0就爲開發SAF提供了這樣一個環境,甚至比VB還要作得更好。

那麼到底NetBeans6.0SAF提供了什麼樣的優點呢?

l         生成基礎框架,沒必要每次新建立一個程序的時候都從頭開始

l         唾手可得的國際化支持,在Netbeans裏對SAF程序國際化,簡單得不能再簡單

l         擁有Swing世界裏的明星級UI設計工具模塊Matisse提供的免費大餐

l         NetBeans開發SAF,意味着你還可使用Beans BindingJSR 295),數據綁定將問題變得更簡單



開始以前

用NetBeans 6.0開發基於SAF,其實不用明白SAF,主要遵循必定的開發原則也能夠開發出穩定高效的SAF程序來

可是爲了你更深刻的理解SAF,強烈建議看下面的文章

l         Using the Swing Application Framework (JSR 296)

http://java.sun.com/developer/technicalArticles/javase/swingappfr/

l         Swing應用程序框架(Swing Application Framework)API緒論(JSR-296)之一

http://www.javaeye.com/topic/81326

Swing應用程序框架(Swing Application Framework)API緒論(JSR-296)之二

http://www.javaeye.com/topic/81327

l
  
 
若是你有更多的時間,那麼請看下面網址有關Swing的部分

http://blog.sina.com.cn/swingjava



開發環境準備

JDK1.6或以上版本

NetBeans6.0或以上版本

提示:Netbeans 網站上提供有六種捆綁包下載

l         Web & Java EE

l         Mobility

l         Java SE

l         Ruby

l         C/C++

l         All

開發Swing Application Framework只須要Java SE下載包就好了

這樣能真正發揮NetBeans的性能!



建立項目

咱們新建一個項目,從Java種類裏選擇 Java Desktop Application,以下圖

點擊下一步,接着輸入項目名稱、項目存放地址和程序的主類

在Choose Application Shell裏面咱們選擇Basic Application,單擊完成

提示:咱們若是建立基於Swing的數據庫程序,那麼選擇BataBase Application將提供極大的便利。可是在這裏我只是介紹Basic Application,也就是如今咱們用SAF開發普通的桌面程序。



生成的項目目錄結構

l         META-INF/services目錄

該目錄通常存在一個JAR包裏面

META-INF/services目錄涉及一個模式:服務提供者模式

引入該模式通常是爲了程序鬆散耦合,並且是IoC(控制反轉)的另外一種實現方式

服務提供者模式通常有兩個角色

²        服務 :通常爲一個抽象類

²        服務提供者 :抽象類的實現

存在META-INF/services目錄的JAR包通常爲一個「服務提供者」

用NetBeans開發中小型程序不須要服務提供者概念,若是你要深刻理解

能夠Baidu或Google一下META-INF/services

l         foo

foo包是咱們建立程序的主類foo.FooApp時,NetBeans自動爲咱們生成的,

咱們來看看NetBeans爲咱們生成了什麼基礎框架類:

1、FooApp.java

public   class  FooApp  extends  SingleFrameApplication  {

    

/**

     * 在啓動的時候建立和顯示程序的主框架

     
*/


    @Override 
protected void startup() {

        show(
new FooView(this));

    }


    
/**

     *這個方法是用相應的資源注入到特定的Window來初始化程序

     *由於咱們用NetBeansk開發,因此相應的資源是經過Gui生成器來完成

     *也就是不用咱們手動編寫代碼

     *因此這個方法不是必須的

     
*/


    @Override 
protected void configureWindow(java.awt.Window root) {

    }


    
/**

     * 一個方便的靜態獲取器,用來獲取FooApp類的實例

     
*/


    
public static FooApp getApplication() {

        
return Application.getInstance(FooApp.class);

    }


    
/**

     * 程序的運行入口點

     
*/


    
public static void main(String[] args) {

        launch(FooApp.
class, args);

    }


}

FooApp.java裏面的代碼是NetBean爲咱們生成的,開發簡單的程序這裏基本上不須要更改什麼。


2
、FooAboutBox.java

每一個程序都應該有一個關於界面,Netbeans爲咱們生成了關於的模板

修改相應文字就能夠了,固然也能夠本身作個About界面


3
、FooView.java

FooView.java是程序View部分的關鍵,因爲生成的代碼比較多

在解釋代碼以前,我先看看Design部分

NetBenas給咱們生成的框架很是簡單明瞭

須要注意的是圖上標識的兩個地方

 標有1的地區爲消息地區,咱們的程序完成任務後,在這裏提示消息

 標有2的地區爲任務進度條,程序執行任務時在這裏現實任務進度,固然任務有肯定模式和不肯定模式,不肯定模式的進度條持續地顯示動畫來表示正進行的操做。

接下來咱們看看FooView.java的構造器的代碼:

     public  FooView(SingleFrameApplication app)  {

        
super(app);

        initComponents();

        ResourceMap resourceMap 
= getResourceMap();

        
int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");

        messageTimer 
= new Timer(messageTimeout, new ActionListener() {

            
public void actionPerformed(ActionEvent e) {

                statusMessageLabel.setText(
"");

            }


        }
);

        messageTimer.setRepeats(
false);

        
int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");

        
for (int i = 0; i < busyIcons.length; i++{

            busyIcons[i] 
= resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");

        }


        busyIconTimer 
= new Timer(busyAnimationRate, new ActionListener() {

            
public void actionPerformed(ActionEvent e) {

                busyIconIndex 
= (busyIconIndex + 1% busyIcons.length;

                statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);

            }


        }
);

        idleIcon 
= resourceMap.getIcon("StatusBar.idleIcon");

        statusAnimationLabel.setIcon(idleIcon);

        progressBar.setVisible(
false);

        
// connecting action tasks to status bar via TaskMonitor

        TaskMonitor taskMonitor 
= new TaskMonitor(getApplication().getContext());

        taskMonitor.addPropertyChangeListener(

                
new java.beans.PropertyChangeListener() {

            
public void propertyChange(java.beans.PropertyChangeEvent evt) {

                String propertyName 
= evt.getPropertyName();

相關文章
相關標籤/搜索