亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? adapterbus.java

?? SWING的界面UI包 SWING的界面UI包
?? JAVA
字號(hào):
/*
 * Adapter.java
 *
 * Created on 2007年5月2日, 下午11:28
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package dyno.swing.designer.beans;

import dyno.swing.designer.beans.adapters.borders.DefaultBorderAdapter;
import dyno.swing.designer.beans.adapters.component.DefaultComponentAdapter;
import dyno.swing.designer.beans.adapters.layout.DefaultLayoutAdapter;
import java.awt.Component;
import java.awt.Container;
import java.awt.LayoutManager;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Properties;
import java.util.Set;
import javax.swing.JComponent;
import javax.swing.RootPaneContainer;
import javax.swing.border.Border;


/**
 * 適配器中樞,為組件和組件適配器、布局和布局適配器,提供映射關(guān)系的中樞
 * 這個(gè)類是整個(gè)設(shè)計(jì)器的擴(kuò)展點(diǎn)。如果需要擴(kuò)展新的組件類型或者布局管理器的特殊行為,
 * 只需要在components.properties和layouts.properties添加新的映射關(guān)系就可以了。
 *
 * @author William Chen
 */
public class AdapterBus {

    //組件類<-->組件適配器類,在component.properties中定義,該映射表還為該組件子類提供實(shí)例化幫助
    private static HashMap<Class<? extends Component>, Class<? extends ComponentAdapter>> componentAdapterClasses;
    //組件類<-->組件適配器,由上一個(gè)映射關(guān)系生成
    //private static HashMap<Class<?extends Component>, ComponentAdapter> componentAdapters;
    //布局類<-->布局適配器,在layouts.properties中定義
    private static HashMap<Class<? extends LayoutManager>, Class<? extends LayoutAdapter>> layoutAdapters;
    private static HashMap<Class<? extends Border>, Class<? extends BorderAdapter>> borderAdapters;
    static {
        //初始化
        initComponentAdapters();
        initLayoutAdapters();
        initBorderAdapters();
    }

    /**
     * 初始化組件適配器
     */
    @SuppressWarnings(value = "unchecked")
    private static void initComponentAdapters() {
        try {
            componentAdapterClasses = new HashMap<Class<? extends Component>, Class<? extends ComponentAdapter>>();

            Properties prop = new Properties();
            prop.load(AdapterBus.class.getResourceAsStream("components.properties"));

            Set<String> keys = prop.stringPropertyNames();

            for (String compClassName : keys) {
                String adapterClassName = prop.getProperty(compClassName);
                Class<? extends Component> compClass = (Class<? extends Component>) Class.forName(compClassName);
                Class<? extends ComponentAdapter> adapterClass = (Class<? extends ComponentAdapter>) Class.forName(adapterClassName);
                componentAdapterClasses.put(compClass, adapterClass);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     * 初始化布局適配器
     */
    @SuppressWarnings(value = "unchecked")
    private static void initLayoutAdapters() {
        try {
            layoutAdapters = new HashMap<Class<? extends LayoutManager>, Class<? extends LayoutAdapter>>();

            Properties prop = new Properties();
            prop.load(AdapterBus.class.getResourceAsStream("layouts.properties"));

            Set<String> keys = prop.stringPropertyNames();

            for (String layoutClassName : keys) {
                String adapterClassName = prop.getProperty(layoutClassName);
                Class<LayoutManager> layoutClass = (Class<LayoutManager>) Class.forName(layoutClassName);
                Class<LayoutAdapter> adapterClass = (Class<LayoutAdapter>) Class.forName(adapterClassName);
                layoutAdapters.put(layoutClass, adapterClass);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private static void initBorderAdapters() {
        try {
            borderAdapters = new HashMap<Class<? extends Border>, Class<? extends BorderAdapter>>();

            Properties prop = new Properties();
            prop.load(AdapterBus.class.getResourceAsStream("borders.properties"));

            Set<String> keys = prop.stringPropertyNames();

            for (String borderClassName : keys) {
                String adapterClassName = prop.getProperty(borderClassName);
                Class<Border> borderClass = (Class<Border>) Class.forName(borderClassName);
                Class<BorderAdapter> adapterClass = (Class<BorderAdapter>) Class.forName(adapterClassName);
                borderAdapters.put(borderClass, adapterClass);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     * 獲取組件類型是componentClass對(duì)應(yīng)的組件適配器,如果初始映射表中沒(méi)有該適配器,
     * 則繼續(xù)查找其父類對(duì)應(yīng)的適配器,直至查找到Component類為止,如果還是沒(méi)有查找到,
     * 則使用缺省的組件適配器:DefaultComponentAdapter
     *
     * @return 該組件類所對(duì)應(yīng)的組件適配器對(duì)象
     */
    public static ComponentAdapter createComponentAdapter(SwingDesigner designer, Component component) {
        Class<? extends Component> componentClass = component.getClass();
        ComponentAdapter adapter;

        //如映射中沒(méi)有,則查找其父類、祖先類直到Component或者空
        Class parentClass = searchAdapterClass(componentAdapterClasses, componentClass, Component.class);

        if ((parentClass == null) || (parentClass == Component.class)) {
            //如果沒(méi)有查找到則使用缺省的組件適配器
            adapter = new DefaultComponentAdapter(designer, component);
        } else {
            try {
                //查找了,則為實(shí)例化一個(gè)適配器
                Class<? extends ComponentAdapter> adapterClass = componentAdapterClasses.get(parentClass);
                Constructor<? extends ComponentAdapter> cons = adapterClass.getConstructor(SwingDesigner.class, Component.class);
                adapter = cons.newInstance(designer, component);
            } catch (Exception ex) {
                ex.printStackTrace();
                //實(shí)例化失敗,則轉(zhuǎn)為缺省的組件適配器
                adapter = new DefaultComponentAdapter(designer, component);
            }
        }
        return adapter;
    }

    private static Class searchAdapterClass(HashMap maps, Class clazz, Class stop) {
        Class parentClass = clazz;
        while ((parentClass != null) && (parentClass != stop) && (maps.get(parentClass) == null)) {
            parentClass = parentClass.getSuperclass();
        }
        return parentClass;
    }
    public static JComponent getJComponent(Component component){
        JComponent jcomponent;
        if (component instanceof JComponent) {
            jcomponent = (JComponent) component;
        } else if (component instanceof RootPaneContainer) {
            jcomponent = (JComponent)((RootPaneContainer) component).getContentPane();
        } else {
            return null;
        }
        return jcomponent;
    }
    /**
     * 獲取組件類型是componentClass對(duì)應(yīng)的組件適配器,如果初始映射表中沒(méi)有該適配器,
     * 則繼續(xù)查找其父類對(duì)應(yīng)的適配器,直至查找到Component類為止,如果還是沒(méi)有查找到,
     * 則使用缺省的組件適配器:DefaultComponentAdapter
     *
     * @return 該組件類所對(duì)應(yīng)的組件適配器對(duì)象
     */
    public static ComponentAdapter getComponentAdapter(SwingDesigner designer, Component component) {
        JComponent jcomponent=getJComponent(component);
        ComponentAdapter adapter = (ComponentAdapter) jcomponent.getClientProperty("component.adapter");
        if (adapter == null) {
            adapter = createComponentAdapter(designer, component);
            jcomponent.putClientProperty("component.adapter", adapter);
        }
        return adapter;
    }

    /**
     * 獲取layoutClass布局管理器對(duì)應(yīng)的布局適配器
     */
    public static LayoutAdapter getLayoutAdapter(SwingDesigner designer, Container container) {
        LayoutManager layout = container.getLayout();
        Class<? extends LayoutManager> layoutClass = layout.getClass();
        Class parentClass = searchAdapterClass(layoutAdapters, layoutClass, LayoutManager.class);
        if (parentClass == null || parentClass == LayoutManager.class) {
            return new DefaultLayoutAdapter(designer, container);
        } else {
            Class<? extends LayoutAdapter> adapterClass = layoutAdapters.get(parentClass);
            try {
                Constructor<? extends LayoutAdapter> cons = adapterClass.getConstructor(SwingDesigner.class, Container.class);
                LayoutAdapter adapter = cons.newInstance(designer, container);
                return adapter;
            } catch (Exception e) {
                e.printStackTrace();
                LayoutAdapter adapter = new DefaultLayoutAdapter(designer, container);
                return adapter;
            }
        }
    }

    /**
     * 獲取layoutClass布局管理器對(duì)應(yīng)的布局適配器
     */
    public static BorderAdapter getBorderAdapter(Border border) {
        Class<? extends Border> borderClass = border.getClass();
        Class parentClass = searchAdapterClass(borderAdapters, borderClass, Border.class);
        if (parentClass == null || parentClass == Border.class) {
            return new DefaultBorderAdapter(border);
        } else {
            Class<? extends BorderAdapter> adapterClass = borderAdapters.get(parentClass);
            try {
                Constructor<? extends BorderAdapter> cons = adapterClass.getConstructor(Border.class);
                BorderAdapter adapter = cons.newInstance(border);
                return adapter;
            } catch (Exception e) {
                e.printStackTrace();
                BorderAdapter adapter = new DefaultBorderAdapter(border);
                return adapter;
            }
        }
    }
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区高清| 久久品道一品道久久精品| 久久久www成人免费毛片麻豆| 视频精品一区二区| 日韩亚洲电影在线| 国产激情视频一区二区在线观看 | 美美哒免费高清在线观看视频一区二区 | 99亚偷拍自图区亚洲| 国产精品毛片高清在线完整版| 北条麻妃一区二区三区| 亚洲高清中文字幕| 久久天堂av综合合色蜜桃网| 成人动漫一区二区在线| 狠狠v欧美v日韩v亚洲ⅴ| 国产亚洲一二三区| 精品国产不卡一区二区三区| 日韩亚洲欧美在线观看| 日韩久久免费av| 精品电影一区二区三区| 精品国产乱码久久久久久1区2区| 日韩三级av在线播放| 日韩欧美在线观看一区二区三区| 精品免费99久久| 国产精品美女视频| 午夜国产精品影院在线观看| 久久99精品网久久| 色爱区综合激月婷婷| 国产精品电影一区二区三区| 成人免费毛片a| 久久精品国产成人一区二区三区 | 97aⅴ精品视频一二三区| 国产精品99久久久久久似苏梦涵| 秋霞午夜av一区二区三区| 天堂在线亚洲视频| 一区二区在线观看视频| 亚洲欧美日韩在线不卡| 亚洲丝袜精品丝袜在线| 亚洲三级免费电影| 亚洲va在线va天堂| 香蕉av福利精品导航| 日韩黄色在线观看| 国产精品白丝jk白祙喷水网站| 精品一区二区影视| 99国产欧美久久久精品| 91丨九色丨尤物| 色婷婷久久99综合精品jk白丝| heyzo一本久久综合| 欧美一区二区三区色| 久久久久9999亚洲精品| 国产精品美女久久久久aⅴ| 老司机免费视频一区二区| 久久精品国产网站| 麻豆国产一区二区| 日韩专区在线视频| 国产精品日产欧美久久久久| 色国产综合视频| 欧美精品一二三区| 在线一区二区视频| 日韩欧美国产三级| 亚洲美女一区二区三区| 国产综合色视频| 欧美综合天天夜夜久久| 国产日韩欧美在线一区| 亚洲成av人综合在线观看| 国产成人精品免费| 欧美美女黄视频| 中文字幕亚洲成人| 成人91在线观看| 国产婷婷精品av在线| 美脚の诱脚舐め脚责91| 91久久久免费一区二区| 亚洲人成在线观看一区二区| 久久精品国产99| 久久综合久久99| 韩国av一区二区三区在线观看| 欧美日韩亚洲综合在线| 亚洲国产日韩一级| 欧美伊人久久大香线蕉综合69| 欧美国产日韩精品免费观看| 久久精品国产亚洲aⅴ| 精品久久人人做人人爰| 国产伦精品一区二区三区视频青涩| 91精品国产综合久久蜜臀 | 色综合网色综合| 久久精品网站免费观看| 国产精品一二三区| 亚洲视频一区二区在线| 欧美人伦禁忌dvd放荡欲情| 日本网站在线观看一区二区三区| 精品国产乱码久久久久久闺蜜| 成人在线一区二区三区| 一区二区国产视频| 欧美一二三在线| www.欧美日韩国产在线| 美女视频第一区二区三区免费观看网站| 日韩一级完整毛片| 成人黄色软件下载| 美日韩一区二区| |精品福利一区二区三区| 欧美成人在线直播| 色婷婷精品久久二区二区蜜臀av | 日韩午夜精品视频| 一本色道久久加勒比精品| 亚洲电影一级片| 国产精品久久久久四虎| 欧美日韩一区二区三区四区五区 | 韩国在线一区二区| 一区2区3区在线看| 亚洲人成影院在线观看| 国产亚洲综合av| 欧美一卡二卡在线| 在线观看免费视频综合| av不卡在线播放| 国产精品亚洲第一| 国产精品综合网| 精品一区二区日韩| 国内外成人在线| 国产成人午夜99999| 国产成人精品亚洲日本在线桃色 | 麻豆成人91精品二区三区| 香蕉影视欧美成人| 美女www一区二区| 美国三级日本三级久久99| 一片黄亚洲嫩模| 亚洲成a人片在线不卡一二三区| 日本一区二区成人在线| 亚洲少妇屁股交4| 一区二区视频免费在线观看| 亚洲欧美国产77777| 亚洲444eee在线观看| 久久国产尿小便嘘嘘尿| 国产白丝网站精品污在线入口| 成人免费高清视频| 一本一道波多野结衣一区二区| 在线观看不卡视频| 精品久久久久久久人人人人传媒 | 亚洲美腿欧美偷拍| 国产一区二区三区黄视频| 成人夜色视频网站在线观看| av一区二区三区| 日韩一二三区视频| 亚洲乱码一区二区三区在线观看| 日本不卡中文字幕| 91免费在线看| 久久综合网色—综合色88| 亚洲人成伊人成综合网小说| 日韩激情一二三区| 日本高清不卡aⅴ免费网站| 欧美大片一区二区三区| 亚洲精品菠萝久久久久久久| 久久精品久久久精品美女| 欧美日韩日日摸| 亚洲一本大道在线| 99久久综合99久久综合网站| 久久精品男人天堂av| 狠狠色狠狠色综合系列| 日韩三级精品电影久久久| 久久精品999| 欧美一二三在线| 奇米精品一区二区三区四区| 欧美妇女性影城| 久久99国产精品免费网站| 日韩一级二级三级| 免费成人av资源网| 3751色影院一区二区三区| 国产一区二区视频在线播放| 欧美日韩二区三区| 自拍偷拍亚洲欧美日韩| 国产一区二区三区免费观看| 一区二区三区在线视频观看58| 国产欧美中文在线| 26uuu亚洲综合色欧美| 99久久免费精品| 日本精品视频一区二区| 国产成人av一区二区三区在线| 日韩高清在线观看| 午夜久久久久久电影| 午夜激情一区二区三区| 一个色在线综合| 亚洲午夜激情av| 欧美国产日韩亚洲一区| 欧美tickling网站挠脚心| 成人黄色小视频| 成人av在线网| 色综合天天天天做夜夜夜夜做| 福利91精品一区二区三区| 国产成人a级片| 99久久国产综合精品女不卡| 不卡一区二区三区四区| 91小视频在线| 欧美午夜一区二区三区 | 欧美性猛片aaaaaaa做受| 99久久久免费精品国产一区二区 | 日韩欧美美女一区二区三区| 欧美日韩不卡一区| 日韩高清在线电影| 午夜精品久久久久久久久久久| 日韩美女主播在线视频一区二区三区| 在线观看av不卡| 欧美丝袜自拍制服另类|