2014-02-17 85 views
1
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Frame { 

    private JFrame jFrame; 

    public Frame() { 
     try { 
      UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 
      JFrame.setDefaultLookAndFeelDecorated(true); 
      JDialog.setDefaultLookAndFeelDecorated(true); 
     } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { 
      e.printStackTrace(); 
     } 
    } 

    private void create() { 
     jFrame = new JFrame("frame"); 
     jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jFrame.setSize(200, 200); 
     jFrame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new Frame().create(); 
    } 

} 

上面的代碼工作正常,但如果我將jFrame.undecorated設置爲true,它不會刪除框架?有誰知道爲什麼不呢?謝謝。setUndecorated無法使用非默認外觀

編輯:另外發現,如果我將jFrame.undecorated設置爲false,另一個具有默認外觀和感覺的框架也會顯示。就像這樣:

example

+0

請問我的問題是 - 在Win8和Java7中? – mKorbel

+0

哈哈,是的。 mts mts – user1009569

+1

AFAIK有問題[Java7中的透明和未修飾的容器(OS不重要)](http://stackoverflow.com/questions/16219111/cant-transparent-and-undecorated-jframe-in-jdk7-當啓用靈氣) – mKorbel

回答

1

檢查的setUndecorated()方法的文檔 - 只能在不可見的調用。帶有兩個調用的代碼在構造函數中註釋掉,但添加了jFrame.setUndecorated(true);在setVisible()調用之前。

import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Frame { 

private JFrame jFrame; 

public Frame() { 
    try { 
       UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 
     //JFrame.setDefaultLookAndFeelDecorated(true); 
     //JDialog.setDefaultLookAndFeelDecorated(true); 

    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { 
     e.printStackTrace(); 
    } 
} 

private void create() { 
    jFrame = new JFrame("frame"); 
    jFrame.setUndecorated(true); 
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jFrame.setSize(200, 200); 
    jFrame.setVisible(true); 

} 

public static void main(String[] args) { 
    new Frame().create(); 
} 

} 
+0

是的,我知道這是不可見的。使用JFrame.setDefaultLookAndFeelDecorated(true);評論說,JFrame不會顯示外觀和感覺。另外,我希望能夠通過單擊按鈕來移除框架,setUndecorated(true)不起作用。 – user1009569

+0

所以我想知道如果做一些最小化框架,然後設置爲undecorated,仍然會被視爲「不可見」?猜測不,但可能值得一試。 – mikemil

+0

它沒有任何關係,它是可見的,正如我上面所說的,將undecorated標誌設置爲true,無論是否可見,都不會刪除框架。 – user1009569