TWaver - 專注UI技術

          http://twaver.servasoft.com/
          posts - 171, comments - 191, trackbacks - 0, articles - 2
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Applet中避免單類模式使用UI組件

          Posted on 2010-08-29 09:14 TWaver 閱讀(1252) 評論(0)  編輯  收藏
          單類為了啥:保證實例唯一;提供全局函數;減少內存消耗;…. 也許還有很多很多用途,不過在Applet的使用中一定要避免UI組件單類的設計模式:

           

          1、主要原因是如果Applet被重新加載,也就是點擊瀏覽器的刷新按鈕,或者在同一個瀏覽器下關閉Applet再打開的情況下,新的Applet將以新的Swing toolkit threads對鍵盤事件進行處理,這樣以前緩存的單UI實例組件將再也接收不到鍵盤事件。http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4339842

           

          2、當然還有另外一個問題就是Swing的組件只能在一個容器中呈現,無法讓兩個容器同時展示同一個UI組件,簡單的理解就是說如果你在一個瀏覽器中新開一個同session的窗口將會導致只有一個窗口能顯示單類的組件,另一個的UI組件將會丟失。

           

           1import java.awt.BorderLayout;
           2import java.awt.GridLayout;
           3
           4import javax.swing.JApplet;
           5import javax.swing.JPanel;
           6import javax.swing.JTextArea;
           7import javax.swing.border.TitledBorder;
           8
           9class SinglePanel extends JPanel{
          10 private final static SinglePanel instance = new SinglePanel();
          11 public static SinglePanel getInstance(){
          12  return instance;
          13 }

          14 private SinglePanel(){
          15  TestApplet.initPanel(this"single panel");
          16 }

          17}

          18
          19class MultiPanel extends JPanel{
          20 public static MultiPanel getInstance(){
          21  return new MultiPanel();
          22 }

          23 public MultiPanel(){
          24  TestApplet.initPanel(this"multi panel");
          25 }

          26}

          27
          28public class TestApplet extends JApplet {
          29
          30    public void init() {
          31     JPanel contentPane = new JPanel(new GridLayout(21));
          32     contentPane.add(SinglePanel.getInstance());
          33     contentPane.add(MultiPanel.getInstance());
          34     this.setContentPane(contentPane);
          35    }

          36
          37 public static void initPanel(JPanel panel, String title){
          38  panel.setLayout(new BorderLayout());
          39  panel.setBorder(new TitledBorder(title));
          40  panel.add(new JTextArea(), BorderLayout.CENTER);
          41 }

          42}

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 沅江市| 聂荣县| 肇东市| 新河县| 普定县| 濉溪县| 临城县| 太康县| 古蔺县| 日喀则市| 阜平县| 博野县| 博湖县| 南召县| 临澧县| 随州市| 宽城| 金沙县| 保康县| 建昌县| 富裕县| 河西区| 梁平县| 泰和县| 科技| 金阳县| 句容市| 隆德县| 巴彦淖尔市| 常州市| 罗江县| 海原县| 安丘市| 和静县| 屏南县| 会同县| 沾益县| 香格里拉县| 博客| 新竹县| 德化县|