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 閱讀(1250) 評論(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}

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


          網站導航:
           
          主站蜘蛛池模板: 红河县| 巨鹿县| 进贤县| 铅山县| 潼关县| 德安县| 孝感市| 屯昌县| 安康市| 和林格尔县| 广汉市| 江川县| 敦煌市| 唐山市| 印江| 乌审旗| 定远县| 阿城市| 宜兰县| 惠州市| 商丘市| 方正县| 特克斯县| 涡阳县| 元谋县| 丘北县| 法库县| 吉首市| 普陀区| 南漳县| 类乌齐县| 广饶县| 定西市| 新乐市| 永福县| 武定县| 乌鲁木齐县| 德化县| 鹤峰县| 永兴县| 商城县|