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}

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


          網站導航:
           
          主站蜘蛛池模板: 泰安市| 五河县| 镇坪县| 五大连池市| 中牟县| 登封市| 威远县| 喀喇沁旗| 西乌| 白城市| 汤阴县| 马龙县| 武定县| 和田县| 武清区| 大同市| 和龙市| 巴林右旗| 右玉县| 前郭尔| 江口县| 远安县| 丰县| 包头市| 札达县| 宜章县| 永年县| 尼木县| 巴彦县| 荃湾区| 凤阳县| 蒲城县| 乌拉特前旗| 武城县| 罗山县| 长寿区| 辛集市| 伊金霍洛旗| 蓝山县| 博白县| 靖远县|