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

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

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

    West Farm
    吾本布衣,生于川北,躬耕于代碼的田地上。
    posts - 16,  comments - 15,  trackbacks - 0
    SWT的Table不夠強大,而且似乎有嚴重的性能問題。(貌似是調用OS的實現,但是在win7上面跑卻非常慢,奇特!本地的性能不如虛擬機上跑的Swing)

    好在SWT中可以嵌入AWT。

    反正本人以前沒有過多Swing的經驗,但是在試玩了JTable之后發現確實很強大。

    對于有興趣的讀者可以試一下,本文將分享如何使得JTable與JFace Data Binding Framework(下文中簡稱JDBF)一起協同工作。

    通常像Table和List這種UI組件,展現的都是一個對象集合。JDBF 則為我們處理對象集合和UI界面的同步的問題。以List為例子,在Java中有java.util.List,而JFDB則提供了相應的
    ObservableList類,這個類Wrap一個java.util.List,當你對其進行增刪改時,與其綁定的UI組件會自動得到同步。但是ObservableList 的實現有個很大的問題就是對其的訪問只限于其所屬的Realm,這個Realm說白了就是SWT的UI線程,而當我們在SWT中嵌入AWT時,其中的AWT界面是跑在其自身的線程里面的。所以想要讓JTable與JFace Data Binding Framework(下文中簡稱JDBF)一起協同工作還要解決多線程的問題。廢話不多說了,直接上菜:

     public class DOTableModel extends AbstractTableModel  {
        /**
         * the ObservableList instance  to be shared with
         
    */
        private ObservableList list;
        
        private volatile  Integer  rowCount = null;
        
        private volatile DOModel object;;
        
        private  final Object lock = new Object();

        private static final long serialVersionUID = -8377145381412656796L;
        
        public DOTableModel(ObservableList list){
            this.list = list;
            this.list.addListChangeListener(new IListChangeListener(){
                @Override
                public void handleListChange(ListChangeEvent event) {
                    for(ListDiffEntry de : event.diff.getDifferences()){
                        if(de.isAddition()){
                            DOTableModel.this.fireTableRowsInserted(de.getPosition(), de.getPosition());
                        }else{
                            DOTableModel.this.fireTableRowsDeleted(de.getPosition(), de.getPosition());
                        }
                    }
                }
            });
        }

        @Override
        public int getRowCount() {
            list.getRealm().exec(new Runnable(){
                @Override
                public  void run() {
                    rowCount = list.size();
                    synchronized (lock) {
                        lock.notify();
                     }
                }
            });
            synchronized (lock) {
                while(rowCount == null){
                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
             }
            return rowCount;
        }

        @Override
        public int getColumnCount() {
            return 11;
        }
        
        private void getObjectFromSWTRealm(final int rowIndex){
            object =  null;
            list.getRealm().exec(new Runnable(){
                @Override
                public synchronized void run() {
                    object = (DOModel) list.get(rowIndex);
                    synchronized (lock) {
                        lock.notify();
                     }
                }
            });
            synchronized (lock) {
                while(object == null){
                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
             }
        }

        @Override
        public Object getValueAt(final int rowIndex, int columnIndex) {
            getObjectFromSWTRealm(rowIndex);
            ...
        }

        @Override
        public void setValueAt(Object oValue, final int rowIndex, int columnIndex) {
            getObjectFromSWTRealm(rowIndex); 
            ...
        }

        @Override
        public String getColumnName(int column) {
           ...
        }

        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return true;
        }
        
        

    }





    posted on 2012-04-05 23:46 West Farmer 閱讀(701) 評論(2)  編輯  收藏

    FeedBack:
    # re: 讓JFace Data Binding與Swing JTable一起舞蹈
    2012-04-05 23:49 | [西部農民]
    本人一貫不提供任何成熟的可立即投入使用的代碼。  回復  更多評論
      
    # re: 讓JFace Data Binding與Swing JTable一起舞蹈
    2013-03-14 00:17 | [西部農民]
    后來發現,這完全是沒有必要的!呵呵,不過搞清楚了一些數據綁定和UI線程的關系。  回復  更多評論
      

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


    網站導航:
     

    <2013年3月>
    242526272812
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    相冊

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: a毛片免费播放全部完整| 3344永久在线观看视频免费首页 | 亚洲国产精品日韩在线| 成年男女免费视频网站| 一级黄色片免费观看| 亚洲a一级免费视频| 日韩国产免费一区二区三区| 黄色三级三级免费看| 久久亚洲精品国产精品黑人| 四虎影院免费在线播放| 97无码人妻福利免费公开在线视频| 中文文字幕文字幕亚洲色| 中文字幕在线亚洲精品 | 免费A级毛片无码久久版| 久久ww精品w免费人成| 美女黄网站人色视频免费| 久久久久亚洲AV无码麻豆| 免费观看午夜在线欧差毛片| 一级毛片免费观看| 免费国产黄网站在线观看动图| 亚洲宅男永久在线| 亚洲欧洲中文日韩久久AV乱码| 日韩版码免费福利视频| 美女视频黄a视频全免费网站色窝| 亚洲暴爽av人人爽日日碰| 久久青青草原亚洲AV无码麻豆| 国产一级淫片免费播放电影| 亚洲电影免费观看| baoyu122.永久免费视频| 亚洲AV成人精品日韩一区| 亚洲国产精品久久网午夜| 亚洲成AV人在线播放无码| 男人的天堂亚洲一区二区三区 | 可以免费观看的国产视频| 香蕉视频免费在线| 亚洲欧美日韩综合久久久| 亚洲成a人片7777| 亚洲不卡中文字幕无码| 国产亚洲精品无码拍拍拍色欲| 国产中文字幕免费| 麻豆国产人免费人成免费视频|