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

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

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

    何以解憂?唯有Java

    其實(shí)程序員也懂得浪漫!
    posts - 90, comments - 637, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
        Swing應(yīng)用程序如果是在開源的Look&&Feel 之間切換,感覺很容易,但是如果 把應(yīng)用程序在開源外觀下切換到系統(tǒng)默認(rèn)的或者JDK自帶的外觀時(shí),問題就來了。 不是沒有標(biāo)題欄,就是標(biāo)題欄的外觀沒有改變,用的是系統(tǒng)的窗口裝飾。這些是因?yàn)樵趹?yīng)用程序啟動時(shí)在main方法里添加了這樣一句代碼造成的:
       
    JFrame.setDefaultLookAndFeelDecorated(true);

    目前解決這個(gè)問題的辦法就是先將 原來的JFrame dispose掉 ,然后在new一個(gè) JFrame ,讓原來的frame 指向這個(gè)新的JFrame。不多說,看代碼比較直觀, 核心代碼如下:

        初始化應(yīng)用,initComponents()方法是NetBeans IDE生成的,就不貼了。

      

        private static JFrame config;
        
    private Rectangle savedBounds;



        
    /** Creates new form Config */
        
    public SkinChangeDemo() {
            initComponents();
        }

        
    public SkinChangeDemo(boolean decor) {
            setUndecorated(decor);
            initComponents();
        }


    下面就是核心代碼:

     private void saharaButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
            
    // TODO add your handling code here:
            LookAndFeel old = UIManager.getLookAndFeel();
            SubstanceSkin skin 
    = new SaharaSkin();
            
    if (old instanceof SubstanceLookAndFeel) {
                SubstanceLookAndFeel.setSkin(skin);
            } 
    else {   //如果不是Substance的外觀則切換為Substance外觀
                    changSkin(skin);
            }
        }                                            

        
    private void nimbusButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
            
    try {
                UIManager.setLookAndFeel(
    new NimbusLookAndFeel());
                savedBounds 
    = getBounds();
                dispose();
                config 
    = null;
                config 
    = new SkinChangeDemo(false);
                config.setBounds(savedBounds);
                config.setVisible(
    true);
            } 
    catch (UnsupportedLookAndFeelException ex) {
                Logger.getLogger(SkinChangeDemo.
    class.getName()).log(Level.SEVERE, null, ex);
            }
            SwingUtilities.updateComponentTreeUI(
    this);

        }                                            

        
    private void businessButtonActionPerformed(java.awt.event.ActionEvent evt) {                                               
            LookAndFeel old 
    = UIManager.getLookAndFeel();
            SubstanceSkin skin 
    = new BusinessSkin();
            
    if (old instanceof SubstanceLookAndFeel) {
                SubstanceLookAndFeel.setSkin(skin);
            } 
    else {    //如果不是Substance的外觀則切換為Substance外觀
                changSkin(skin);
            }
        }                                              

        
    /**
         *用于將非Substance 外觀的界面該為Substance外觀。
         * 
    @param skin
         
    */
        
    private void changSkin(SubstanceSkin skin) {
            savedBounds 
    = getBounds();
            dispose();
            config 
    = new SkinChangeDemo(true);
            config.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);  
    //這句是關(guān)鍵代碼,自己看API體會吧
            config.setBounds(savedBounds);  //保持變換皮膚時(shí)位置不變
            SubstanceLookAndFeel.setSkin(skin);
            config.setVisible(
    true);
            config.getRootPane().updateUI();
            SwingUtilities.updateComponentTreeUI(
    this);

        }

    main方法:
     public static void main(String args[]) {

            JFrame.setDefaultLookAndFeelDecorated(
    true);
            JDialog.setDefaultLookAndFeelDecorated(
    true);
            
    try {
                
    //新建一個(gè)圖片水印,路徑可以自己該,使用自己喜歡的圖片來做應(yīng)用程序的水印圖片、
                SubstanceImageWatermark watermark = new SubstanceImageWatermark(SkinChangeDemo.class.getResourceAsStream("/demo/031be.jpg"));
                watermark.setKind(ImageWatermarkKind.APP_CENTER);
                watermark.setOpacity((
    float0.7);
                UIManager.setLookAndFeel(
    new SubstanceOfficeBlue2007LookAndFeel());
                SubstanceSkin skin 
    = new OfficeBlue2007Skin().withWatermark(watermark);

                SubstanceLookAndFeel.setSkin(skin);

            } 
    catch (UnsupportedLookAndFeelException ex) {
                Logger.getLogger(SkinChangeDemo.
    class.getName()).log(Level.SEVERE, null, ex);
            }
            java.awt.EventQueue.invokeLater(
    new Runnable() {

                
    public void run() {
                    config 
    = new SkinChangeDemo();
                    config.setVisible(
    true);
                    config.setLocationRelativeTo(
    null);
                }
            });
        }

    點(diǎn)擊不同的按鈕呈現(xiàn)不同的外觀,JDK里的和開源的外觀之間切換。



     沒水印的效果圖:






    BTW: 這篇文章里的內(nèi)容,正好可以回答http://www.javaeye.com/topic/400574?page=1   這個(gè)帖子中樓主的問題。

          如果有大家有什么更好的   方法,請大家不吝賜教!

         源代碼以上傳,有需要的自己下載:Demo3



    評論

    # re: Swing 本地外觀與Substance外觀之間的切換問題及解決方案  回復(fù)  更多評論   

    2009-06-09 22:13 by zht
    很不錯

    # re: Swing 本地外觀與Substance外觀之間的切換問題及解決方案  回復(fù)  更多評論   

    2009-06-10 10:09 by 找個(gè)美女做老婆
    Swing,我覺得現(xiàn)在已經(jīng)不太流行了
    我的blog搬家了 http://www.javaly.cn
    Java樂園, Java開發(fā)人員的樂園,創(chuàng)業(yè)者的樂園 ,群號:15651281

    # re: Swing 本地外觀與Substance外觀之間的切換問題及解決方案  回復(fù)  更多評論   

    2011-09-29 09:16 by tbw
    不錯
    主站蜘蛛池模板: 丁香花在线视频观看免费| 亚洲乱码中文字幕小综合| 日本亚洲中午字幕乱码| 成人啪精品视频免费网站| 亚洲国产亚洲片在线观看播放| 最近中文字幕无免费| 亚洲高清视频免费| 亚洲日韩中文字幕日韩在线 | 成年女人毛片免费播放视频m | 亚洲精品国产综合久久久久紧| 又大又硬又粗又黄的视频免费看| 久久国产色AV免费看| 久久精品国产亚洲77777| 亚洲人成免费电影| 在线观看亚洲AV日韩A∨| 日韩一区二区免费视频| 午夜亚洲国产精品福利| 亚洲最大激情中文字幕| 男女作爱在线播放免费网站| 91精品国产亚洲爽啪在线影院| 在线视频免费观看爽爽爽| 亚洲国产精品精华液| 中文字幕不卡亚洲| 999久久久免费精品播放| 久久乐国产综合亚洲精品| 亚洲AV成人潮喷综合网| 亚洲国产精品成人精品软件 | 亚洲av高清在线观看一区二区| 一区二区三区免费视频网站| 亚洲精品成人网站在线观看| 最近最新高清免费中文字幕| 国产一级理论免费版| 亚洲人成未满十八禁网站| 亚洲真人日本在线| 19禁啪啪无遮挡免费网站| 国产亚洲精品第一综合| 亚洲AV无码专区国产乱码4SE| 成人午夜视频免费| 久久久精品免费视频| 亚洲av无码专区在线观看亚| 情人伊人久久综合亚洲|