<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    網(wǎng)路冷眼@BlogJava

    熙熙攘攘一閑人 以冷靜的眼光觀察技術(shù)
    posts - 88, comments - 193, trackbacks - 0, articles - 28
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    概述

    本文檔是原型Swing應(yīng)用程序框架的簡介,目標(biāo)讀者是那些愿意評論初始原型的的開發(fā)者。它既不是綜合的教程,也不是開發(fā)者指南,它只是通過示例引入框架主要特性的概觀。在檢查規(guī)格說明(javadoc)和實現(xiàn)之前,閱讀本材料是明智之舉。

    目標(biāo)

    本API的目標(biāo)是由原始的Java規(guī)格請求(JSR) JSR-296所定義, 它在2006年5月批準(zhǔn)。 其整體目標(biāo)是簡化構(gòu)建Swing應(yīng)用程序,讓桌面Java開發(fā)人員對此的工作也是直截了當(dāng)?shù)摹Mㄟ^提供一小組類,也叫“框架”來達(dá)到此目標(biāo)。框架定義了對大多數(shù)桌面應(yīng)用程序的共有的基礎(chǔ)設(shè)施:

    • 應(yīng)用程序生命周期管理,特別是GUI的啟動和關(guān)閉。
    • 對資源管理和載入的支持,這些資源是字符串,格式化的消息,圖像,顏色,字體以及桌面應(yīng)用程序共有的其他類型的資源。
    • 對動作定義,管理和綁定的支持,其中包含了異步運行的動作(在后臺運行)。
    • 持久化會話狀態(tài):支持自動地,有選擇地保存應(yīng)用程序一次運行到下次運行的GUI狀態(tài),比如頂層的窗口幾何位置。

    框架API概述

    框架應(yīng)用程序建立Application基類的子類,它定義了應(yīng)用程序的生命周期,特別是應(yīng)用程序的啟動時所為,關(guān)閉時所為。當(dāng)應(yīng)用程序啟動時,建立這個子類的單個實例。ApplicationContext 單體支持Application類的子類。它提供對動作,資源,任務(wù),對話狀態(tài)和存儲,其它對象和服務(wù)的訪問。它對應(yīng)用程序來說是全局的。框架的整體結(jié)構(gòu)可根據(jù)這兩個單體來描述.

     

    SR-296架構(gòu):應(yīng)用程序(Application),ApplicationContext 單體模式

    免責(zé)聲明

    這是初稿。在許多方面未完成,并且這里所述的API的確在演進(jìn)當(dāng)中。它打算為那些對框架API當(dāng)前狀態(tài)好奇并能容忍其瑕疵的開發(fā)人員所作。我希望它將激發(fā)那種讓代碼和文檔下次修訂更好的建設(shè)性反饋來。

    應(yīng)用程序框架示例

    對開發(fā)者來說,熟悉新的API最容易的方法是通過學(xué)習(xí)幾個示例。本節(jié)提供一系列示例增量式地展示許多API最為重要的方面。每個示例的源代碼可在示例包中找到。

    下面的示例節(jié)包含類它們依賴的框架類的簡單梗概。要獲得更完整的解釋,請參見下面主要章節(jié),或者查詢javadoc規(guī)范。

    基于Hello World的Application

    為了編寫應(yīng)用程序,只需要做幾件事情:

    • 擴(kuò)展Application 類并覆蓋startup方法。 startup方法應(yīng)當(dāng)建立和顯示應(yīng)用程序初始的GUI。
    • 當(dāng)應(yīng)用程序退出時,當(dāng)用戶關(guān)閉最頂層的窗口時,調(diào)用Application.exit()。這將導(dǎo)致應(yīng)用程序讓exitListeners運行并最終運行Application.shudown().
    • 在main方法里,調(diào)用Application.launch方法。這將構(gòu)建并啟動在事件分派線程上的Application子類。

    下列示例正是這樣做的。實際上基于SingleFrameApplication類這種應(yīng)用程序非常簡單,因為它處理應(yīng)用程序JFrame的構(gòu)建和配置。但是本例這個版本應(yīng)當(dāng)使得在SingleFrameApplication 類里的“鉤子下面(under the hood)”發(fā)生的事情更加明了。

     

    public class ApplicationExample1 extends Application {
        JFrame mainFrame 
    = null;
        @Override 
    protected void startup(String[] ignoreArgs) {
            JLabel label 
    = new JLabel("Hello World", JLabel.CENTER);
            label.setFont(
    new Font("LucidaSans", Font.PLAIN, 32));
            mainFrame 
    = new JFrame(" Hello World ");
            mainFrame.add(label, BorderLayout.CENTER);
            mainFrame.addWindowListener(
    new MainFrameListener());
            mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
            mainFrame.pack();
            mainFrame.setLocationRelativeTo(
    null);  // center the window
            mainFrame.setVisible(true);
        }
        
    private class MainFrameListener extends WindowAdapter {
            
    public void windowClosing(WindowEvent e) {
                exit(e);
            }
        }
        
    public static void main(String[] args) {
            launch(ApplicationExample1.
    class, args);
        }
    }
        

     

    如果運行ApplicationExample1,結(jié)果如下:

    ApplicationExample1 (Hello World) 屏幕截圖

    在此仍然存在許多(JFrame)樣板,因為應(yīng)用程序基類不能假定應(yīng)用程序到底構(gòu)建GUI的數(shù)量。下一個示例顯示了通過使用一個擴(kuò)展Application 叫做SingleFrameApplication的類,如何更簡單地完成相同的工作。

    基于Hello World的SingleFrameApplication

    為了建立只有一個主JFrame的應(yīng)用程序,只要擴(kuò)展SingleFrameApplication類即可。應(yīng)用程序的子類應(yīng)當(dāng)覆蓋建立應(yīng)用程序的主GUI面板的startup方法,然后建立,配置和顯示包含這個面板的JFrame。

     

    public class SingleFrameExample1 extends SingleFrameApplication {
        
    public void startup(String[] args) {
            JLabel label 
    = new JLabel(" Hello World ");
            label.setFont(
    new Font("LucidaSans", Font.PLAIN, 32));
            show(label);
        }
        
    public static void main(String[] args) {
            launch(SingleFrameExample1.
    class, args);
        }
    }
        

     

    盡管本例和前面的例子完全一致,但是建立和配置主JFrame的樣本文件是由SingleFrameApplication.show 方法處理的。SingleFrameApplication也負(fù)責(zé)打點一些其它的公共的生命周期雜務(wù),比如載入資源和保存/恢復(fù)對話狀態(tài)。

    帶有資源的SingleFrameApplication

    在前面示例中,建立了帶有文字字符串的JLable。由用戶讀取的字符串應(yīng)當(dāng)本地化。為了完成本地化,字符串應(yīng)當(dāng)從ResourceBundle載入。應(yīng)用程序框架支持自動初始化從ResourceBundle資源載入的有名組件的特性。對“資源注入(resource injection)”的支持超出了字符串的范疇;數(shù)值的初始值,顏色,字體和大多數(shù)其它的公共桌面GUI類型都能夠用資源來定義。

    這里是前面例子的新版本。本例除了設(shè)置它的名稱之外,對JLabel沒作任何配置:

    public class SingleFrameExample2 extends SingleFrameApplication {
        
    public void startup(String[] args) {
            JLabel label 
    = new JLabel();
            label.setName(
    "label");
            show(label);
        }
        
    public static void main(String[] args) {
            launch(SingleFrameExample2.
    class, args);
        }
    }

     
    SingleFrameExample2的ResourceBundle是以相同名字的特性文件,它駐留在資源子包里。文件中的資源定義了一個名叫"label"組件的初始值:

    label.opaque = true
    label.background = 0, 0, 0
    label.foreground = 255, 255, 255
    label.text = Hello World
    label.font = Lucida-PLAIN-48
    label.icon = earth.png

    本例簡單演示了配置從ResourceBundle的組件。在實際應(yīng)用程序里,將使用很可能需要本地化的值的資源,有時是諸如顏色、字體那些和本地化值緊密相關(guān)的特性。通過用資源而不是用代碼定義,隔離依賴于像圖像文件之類的外部對象的組件特性也是有用的。這使得開發(fā)者比較容易理解應(yīng)用程序外部資源依賴是什么,并能簡化對系統(tǒng)的變化的處理。

    如果運行SingleFrameExample2,那么其效果如下:

    SingleFrameExample2 (Hello World) 屏幕截圖

     

    SingleFrameApplication.show方法使用ResourceMap的injectComponents方法初始化從應(yīng)用程序的ResourceBundle載入的每個有名組件的特性。

    退出應(yīng)用程序

    通過調(diào)用Applcaiton.exit方法,應(yīng)用程序應(yīng)當(dāng)能順利退出。當(dāng)關(guān)閉主JFrame時,SingleFrameApplication的職責(zé)所在。在實際的應(yīng)用程序里,確保用戶在關(guān)閉是真的希望退出經(jīng)常是重要的。例如,可能希望詢問未保存的文檔或者未完成的事務(wù)處理。在exit()真的終止應(yīng)用程序之前,通過調(diào)用canExit方法輪詢所有的exitListener。如果任何一個canExit方法返回false,退出過程將終止。否則,調(diào)用exitListener的willExit方法,并最終調(diào)用Appliciton 的shutdown方法。這些方法正是打理任何清掃工作的地方。

    本例在下面正是用一個對話來詢問用戶確認(rèn)退出的。

     

    public class SingleFrameExample3 extends SingleFrameApplication {
        
    public void startup(String[] args) {
            ExitListener maybeExit 
    = new ExitListener() {
                
    public boolean canExit(EventObject e) {
                    
    int option = JOptionPane.showConfirmDialog(null"Really Exit?");
                    
    return option == JOptionPane.YES_OPTION;
                }
                
    public void willExit(EventObject e) { }
            };
            addExitListener(maybeExit);
            JButton button 
    = new JButton();
            button.setName(
    "button");
            button.setAction(
    new ActionAdapter() {
                    
    public void actionPerformed(ActionEvent e) {
                        exit(e);
                    }
                });
            show(button);
        }
        
    public static void main(String[] args) {
            launch(SingleFrameExample3.
    class, args);
        }
    }

    本例的ResourceBundle和前面相似,既然這樣還是配置了這個JButton。也增加了一個定義主JFrame的標(biāo)題的資源。SingleFrameApplication命名它建立的JFrame為"mainFrame"。

    mainFrame.title = ExitListener Demo
    button.background = 255, 255, 255
    button.foreground = 0, 0, 0
    button.text = Click to Exit
    button.font = Lucida-PLAIN-48
    button.icon = exit.png

    如果運行SingleFrameExample3,單擊窗口的關(guān)閉按鈕或者按下巨大的“Click to Exit”按鈕嘗試退出時,將提示操作者確認(rèn):

    SingleFrameExample3 屏幕截圖

    在本例里,使用建立一個實現(xiàn)了javax.swing.Action的匿名類的實例的常規(guī)方法來設(shè)置按鈕的動作特性。動作對象的actionPerformed方法只是調(diào)用exit。應(yīng)用程序框架則通過使用新的@Action標(biāo)注從而建立動作對象的建立。

    (待續(xù),請參見:Swing應(yīng)用程序框架(Swing Application Framework)API緒論(JSR-296)之二(翻譯))


    評論

    # re: Swing應(yīng)用程序框架(Swing Application Framework)API緒論(JSR-296)之一(翻譯)  回復(fù)  更多評論   

    2007-05-22 23:55 by 熱門單曲
    有才樓主 路頂下

    # re: Swing應(yīng)用程序框架(Swing Application Framework)API緒論(JSR-296)之一(翻譯)  回復(fù)  更多評論   

    2008-12-22 13:17 by eydp@163.com
    SingleFrameExample3 ----這個例子中內(nèi)部內(nèi)這個地方總報錯
    button.setAction(new ActionAdapter() {
    public void actionPerformed(ActionEvent e) {
    exit(e);
    }
    });

    # re: Swing應(yīng)用程序框架(Swing Application Framework)API緒論(JSR-296)之一(翻譯)  回復(fù)  更多評論   

    2008-12-24 18:09 by lewhwa
    @eydp@163.com
    這個語句要退出程序,不會報錯的。
    主站蜘蛛池模板: 成人无码WWW免费视频| 亚洲免费视频在线观看| 免费观看91视频| 亚洲人成77777在线播放网站| 亚洲不卡视频在线观看| 黄色网站软件app在线观看免费| 在线观看亚洲人成网站| 免费无码又爽又刺激网站| 久久狠狠爱亚洲综合影院 | 国产成人精品日本亚洲11| 亚洲a级片在线观看| 国产成人3p视频免费观看| 亚洲精品伊人久久久久| 亚洲精品在线视频| 免费视频精品一区二区| 最近2019中文免费字幕| 亚洲第一精品电影网| 亚洲一级免费视频| 亚洲国产精品国自产拍电影| 中文字幕av免费专区| 国产免费人成视频在线观看| 亚洲国产精华液2020| 日本一道高清不卡免费| 亚洲精品美女久久7777777| 亚洲国产a∨无码中文777| 久草免费福利视频| 麻豆91免费视频| 国产亚洲美女精品久久久| 在线免费播放一级毛片| 亚洲综合久久综合激情久久| 国产精品免费精品自在线观看| 亚洲一区二区三区免费观看| 精品国产综合成人亚洲区| 8x8×在线永久免费视频| 亚洲a级在线观看| 久久亚洲AV无码精品色午夜麻| 8x成人永久免费视频| 成人免费777777被爆出| 极品色天使在线婷婷天堂亚洲 | 国色精品va在线观看免费视频| 亚洲丶国产丶欧美一区二区三区|