Swing組件都擴展自JComponent
Sun在JDK 1.0最初發布了圖形API包,代號AWT (abstract windowing toolkit),里面除對GUI基本支持(如結合各OS的事件分發機制等)外,自有一套重量級開發GUI的思路,并提供了一組常規使用的重量級組件。所謂重量級組件就是每個組件都引用一個本地對等體peer成員對象,這個對等體對象利用本地系統GUI API繪制組件。后來在JDK1.1,AWT包中引進了一套輕量級開發GUI的新思路,并提供了一組輕量級組件。所謂輕量級組件就是自身沒有本地對等體,而借助重量級組件作為容器來繪制組件。JDK 1.1之后,sun在開發GUI思路上,在效率,擴展性等方面給出了很多創新,并基于這種新思路推出一套豐富的新組件(輕量級組件),sun為此打出一個新的響亮的代號---Swing,并推薦以后的GUI開發都應該基于Swing的GUI開發思路開展,應該使用或擴展這套Swing組件。
不論是AWT模式還是Swing模式,Sun的GUI開發思路都是純OO的。開發人員總是構建多個組件對象實例來組合建立GUI,這些對象是因不同的輸入輸出表現被封裝為多種組件類的實例,而這些組件類是有合理的繼承關系因而容易擴展的“套件”。而且兩種模式最基本的統一的程序運行思路都是:
1.通過建立各種組件的實例來負責GUI的工作。
2.約定出GUI變化時機—java應用程序隨需發出請求調用或對操作系統級某種操作的監聽(如暴露被遮擋的窗口內容)。
3. 在時機到來時由“框架程序”來判斷并調用應該調用的目標組件實例所提供的各種形式的paint方法(各組件在此方法里通過java 2d API包來實現自己的具體繪制邏輯)來完成各組件繪制。
4. 在GUI的整個生命周期里,通過以上的123模式來完成整個應用界面的隨需而變。
Swing式開發GUI的基本約定包括:Swing提供4個頂層容器JFrame,JDialog,JApplet,JWindow,如果是桌面應用,則GUI必須要有一個JFrame,如果是瀏覽器應用,則GUI必須要有一個JApplet。其他Swing組件,或自定義開發的Swing組件都擴展自JComponent,并且其實例要存在于頂層容器的層次樹中。下面是一個符合約定的GUI的運行分析。
- importjavax.swing.JFrame;
- importjavax.swing.JLabel;
- publicclassBasicSwing{
- publicstaticvoidmain(String[]args){
- javax.swing.SwingUtilities.invokeLater(newRunnable(){
- publicvoidrun(){
- createAndShowGUI();
- }
- privatevoidcreateAndShowGUI(){
- JFrameframe=newJFrame("BasicSwing");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- JLabellabel=newJLabel("helloworld");
- frame.getContentPane().add(label);
- frame.setSize(100,200);
- frame.setVisible(true);
- }
- });
- }
- }
【編輯推薦】