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

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

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

    Java桌面技術

    Java Desktop Technology

    常用鏈接

    統計

    友情連接

    最新評論

    終于有時間寫Blog了

    沉默了近一個月,終于有時間寫Blog了。這些日子除了忙于工作還抽時間看Flex,發現ActionScript的編程思路和SWT、Swing有很多相似之處,而且語法也和Java很相似??傊覍lex極為看好。今后可能要穿插地寫些Flex的Blog了:)

    前寫日子看留言,有人說VB、VC的界面設計都是將界面保存成一個資源文件,這樣能完全做到界面與邏輯的分離。我從事UI設計以來,用過像JBuilder、NetBeans的GUI拖拽工具,但是實現方式均是生成Java代碼而已,這樣不但容易造成偶合,而且工具生成的代碼往往冗長。從我的項目經驗來看,UI部分大多數代碼出現在組件的創建與布局這一環節,如果你使用Matisse將組件布局設置成GridBagLayout或GroupLayout,再隨便拖拽兩三個空間上去,觀察下代碼,很長。而且不了解GridBagLayout和GroupLayout的非專業UI設計人員很難讀懂。

    “將界面保存成一個資源文件”類似想法早就有了,一直想通過xml配置將組件生成而非hardcoding。下一篇的文章將作詳細介紹。在此之前,先解決一個bug,關于自定義布局類FormLayout和CenterLayout。這兩個布局的preferredLayoutSize方法實現如下:
    public Dimension preferredLayoutSize(Container target) {
            return target.getPreferredSize();
        }
    其實是不對的,如果這樣的話當容器沒有設置setPreferredSize的話,運行時會產生堆棧溢出錯誤。解釋下緣由。
    java.awt.Container的getPreferredSize方法定義如下
    public Dimension getPreferredSize() {
     return preferredSize();
        }

    追蹤到preferredSize:
    @Deprecated
        public Dimension preferredSize() {
     /* Avoid grabbing the lock if a reasonable cached size value
      * is available.
      */
         Dimension dim = prefSize;
         if (dim == null || !(isPreferredSizeSet() || isValid())) {
         synchronized (getTreeLock()) {
      prefSize = (layoutMgr != null) ?
          layoutMgr.preferredLayoutSize(this) :
          super.preferredSize();
                    dim = prefSize;
                }
     }
            if (dim != null){
                return new Dimension(dim);
            }
            else{
                return dim;
            }
        }
    發現如果prefSize為空等原因的話,可能返回布局類的layoutMgr.preferredLayoutSize方法。所以說,如果在布局類的preferredLayoutSize實現中返回容器的getPreferredSize,那么很可能陷入函數調用的循環中,最終導致堆棧溢出程序終止。類似的還有minimumLayoutSize和maximumLayoutSize方法,修復的實現如下:
    public Dimension preferredLayoutSize(Container target) {
      target.getPreferredSize();
      synchronized (target.getTreeLock()) {
       return new Dimension(0, 0);
      }
     }

    預計周末發表《通過xml配置文件定義及布局組件》

    posted on 2007-12-25 19:13 sun_java_studio@yahoo.com.cn(電玩) 閱讀(1776) 評論(2)  編輯  收藏 所屬分類: GUI Design

    評論

    # re: 終于有時間寫Blog了 2007-12-25 21:35 久城

    身邊有很多同事都在學習Flex,據說很不錯,還都買了一本厚厚的書叫《Flex第一步》。  回復  更多評論   

    # re: 終于有時間寫Blog了 2007-12-26 09:59 ivin

    期待 電玩 放出更多的好文章啊,一直都在關注你??!  回復  更多評論   

    TWaver中文社區
    主站蜘蛛池模板: 美国免费高清一级毛片| 亚洲黄色在线视频| 亚洲色欲啪啪久久WWW综合网| 久久国产精品免费| 亚洲av午夜成人片精品电影| 亚洲伊人久久精品| AV大片在线无码永久免费| 亚洲色四在线视频观看| 免费观看男人吊女人视频| 亚洲综合色在线观看亚洲| 免费人人潮人人爽一区二区| 日本免费一本天堂在线| AV片在线观看免费| 老子影院午夜伦不卡亚洲| 国产精品四虎在线观看免费 | 亚洲最大无码中文字幕| 19禁啪啪无遮挡免费网站| 成人免费在线视频| 亚洲免费视频网站| 国产免费女女脚奴视频网| 亚洲特级aaaaaa毛片| 黄色网址免费大全| 亚洲gay片在线gv网站| 国产午夜鲁丝片AV无码免费| 亚洲人成亚洲精品| 最近免费字幕中文大全视频| 亚洲AV无码国产精品色| 一级毛片免费一级直接观看| 亚洲人色婷婷成人网站在线观看| 免费一区二区无码视频在线播放| 成人午夜亚洲精品无码网站| 久久国产乱子伦精品免费看| 亚洲 欧洲 视频 伦小说| 亚洲高清无码综合性爱视频| 你是我的城池营垒免费看 | 久艹视频在线免费观看| 亚洲国产精品18久久久久久| 中文亚洲成a人片在线观看| 日本视频一区在线观看免费| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 99999久久久久久亚洲|