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

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

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

    何以解憂?唯有Java

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

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

        初始化應用,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);  
    //這句是關鍵代碼,自己看API體會吧
            config.setBounds(savedBounds);  //保持變換皮膚時位置不變
            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 {
                
    //新建一個圖片水印,路徑可以自己該,使用自己喜歡的圖片來做應用程序的水印圖片、
                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);
                }
            });
        }

    點擊不同的按鈕呈現不同的外觀,JDK里的和開源的外觀之間切換。



     沒水印的效果圖:






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

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

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



    評論

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

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

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

    2009-06-10 10:09 by 找個美女做老婆
    Swing,我覺得現在已經不太流行了
    我的blog搬家了 http://www.javaly.cn
    Java樂園, Java開發人員的樂園,創業者的樂園 ,群號:15651281

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

    2011-09-29 09:16 by tbw
    不錯
    主站蜘蛛池模板: 亚洲av中文无码乱人伦在线观看| 久久青草亚洲AV无码麻豆| 亚洲精品二三区伊人久久| 中文字幕免费在线看线人 | 国产精品无码永久免费888| 免费人成在线观看播放国产| 丰满亚洲大尺度无码无码专线| 在线免费观看色片| 老牛精品亚洲成av人片| 又粗又黄又猛又爽大片免费| 性生大片视频免费观看一级| 亚洲色偷拍区另类无码专区| 精品人妻系列无码人妻免费视频 | 日韩人妻一区二区三区免费| 久久亚洲日韩精品一区二区三区| 99爱免费观看视频在线| 亚洲大香人伊一本线| 日韩中文无码有码免费视频| 美女羞羞免费视频网站| 国产亚洲一区区二区在线| 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 无码乱肉视频免费大全合集| 亚洲日本一线产区和二线| 亚洲国产婷婷综合在线精品| 大地资源在线资源免费观看| 亚洲自偷精品视频自拍| 成全视频在线观看免费高清动漫视频下载 | 日本妇人成熟免费中文字幕| 亚洲爆乳无码专区www| 亚洲人午夜射精精品日韩| 香蕉免费一区二区三区| 在线观看日本亚洲一区| 亚洲精品无码日韩国产不卡?V| 国产精品99精品久久免费| 亚洲熟女综合色一区二区三区 | 亚洲国产精品国自产拍AV| 18禁免费无码无遮挡不卡网站 | 亚洲综合在线一区二区三区| 亚洲一区二区视频在线观看| 84pao强力永久免费高清| 黄网站色成年片大免费高清|