<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)用程序啟動(dò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體會(huì)吧
            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è)帖子中樓主的問題。

          如果有大家有什么更好的   方法,請(qǐng)大家不吝賜教!

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



    評(píng)論

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

    2009-06-09 22:13 by zht
    很不錯(cuò)

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

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

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

    2011-09-29 09:16 by tbw
    不錯(cuò)
    主站蜘蛛池模板: 中文字幕无码毛片免费看| 啦啦啦高清视频在线观看免费| 色欲A∨无码蜜臀AV免费播| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲伊人成无码综合网| 日韩成人精品日本亚洲| 一区二区三区福利视频免费观看| 亚洲人成网77777色在线播放| 成人国产精品免费视频| 亚洲开心婷婷中文字幕| 久久综合九色综合97免费下载| 亚洲av中文无码乱人伦在线播放 | 亚洲午夜精品国产电影在线观看| 91在线老王精品免费播放| 久久综合亚洲色HEZYO社区 | 水蜜桃视频在线观看免费| 久久99亚洲综合精品首页| 国产精品亚洲一区二区麻豆| 免费一级毛片无毒不卡| 亚洲?V乱码久久精品蜜桃| fc2免费人成为视频| 男女啪啪永久免费观看网站| 亚洲人成在线电影| 午夜成人无码福利免费视频| 日本午夜免费福利视频| 亚洲婷婷综合色高清在线| 久久免费区一区二区三波多野| 久久精品国产精品亚洲毛片| 在人线av无码免费高潮喷水| 老司机午夜性生免费福利| 永久免费bbbbbb视频| 一级毛片免费视频网站| 亚洲精品国产成人影院| 精品在线观看免费| 亚洲国产精品乱码一区二区 | 亚洲午夜精品在线| 亚洲成人国产精品| 亚洲视频免费在线播放| 99亚洲乱人伦aⅴ精品| 亚洲国产精品无码AAA片| 麻豆国产精品入口免费观看|