2013-05-14 45 views
2

我試圖用Synth-Framework創建一個自定義的外觀。Java-LAF:如何使用Synth-XML創建裝飾?

我成功地使用教程(Look-And-Feel Tutorial by Oracle/Sun )進行試驗,並設法皮膚按鈕,面板等

的問題,我現在就是,我想裝飾的窗口/ JFrame中。

我讀了一些東西有關,並與MetalLookAndFeel和今典的作品嚐試過了:

try{ 
     UIManager.setLookAndFeel(new MetalLookAndFeel()); 
    }catch(UnsupportedLookAndFeelException e){ 

    } 
    javax.swing.JFrame.setDefaultLookAndFeelDecorated(true); 
    new SFframe().setVisible(true); 

現在我試圖用我自己的LAF:

<?xml version="1.0" encoding="UTF-8"?> 
<synth>  
    <!-- Style that all regions will use --> 
    <style id="backingStyle"> 
     <opaque value="TRUE"/> 
     <font name="Dialog" size="14"/> 
     <state> 
      <color value="#04688D" type="BACKGROUND"/> 
      <color value="#FFFFFF" type="FOREGROUND"/> 
     </state> 
     <defaultsProperty key="Synthetica.window.decoration" type="boolean" value="true"/> 
    </style> 
    <bind style="backingStyle" type="region" key=".*"/> 
    <style id="button"> 
     <!-- Shift the text one pixel when pressed --> 
     <property key="Button.textShiftOffset" type="integer" value="1"/> 
     <!-- set size of buttons --> 
     <insets top="4" left="4" bottom="4" right="4"/> 
     <state> 
      <imagePainter method="buttonBackground" path="/synth/images/Button.png" sourceInsets="4 4 4 4"/> 
      <font name="Dialog" size="16"/> 
      <color type="TEXT_FOREGROUND" value="#FFFFFF"/> 
     </state>    
     <state value="PRESSED"> 
      <imagePainter method="buttonBackground" path="/synth/images/Button_pressed.png" sourceInsets="4 4 4 4"/> 
     </state>    
     <state value="MOUSE_OVER">  
      <imagePainter method="buttonBackground" path="/synth/images/Button_over.png" sourceInsets="4 4 4 4"/> 
     </state> 
    </style> 
    <bind style="button" type="region" key="Button"/> 
</synth> 

我的代碼使用加載LAF看起來是這樣的:

SynthLookAndFeel laf = new SynthLookAndFeel(); 
    try{ 
     InputStream in = SFframe.class.getResourceAsStream("/synth/synth.xml"); 
     laf.load(in, SFframe.class); 
     UIManager.setLookAndFeel(laf); 
    }catch(ParseException | UnsupportedLookAndFeelException e){ 
     e.printStackTrace(); 
    } 
    javax.swing.JFrame.setDefaultLookAndFeelDecorated(true); 
    new SFframe().setVisible(true); 

按鈕和麪板更換皮膚,當然,窗口/ JFR艾美沒有。

我只是找不到一個關於如何使用Synth-XML皮膚/裝飾Window/JFrame的源代碼。 有人可以幫我嗎?

+0

+1用於打擾合成器:-) – mKorbel 2013-05-14 07:35:49

回答

1
  • AFAIK是不可能的裝潢JFrame/JDialog/JWindow用自己的大號&˚F

  • JFrame/JDialog/JWindow是基於同行從本地OS來了,在默認情況下具有相同的裝飾型顏色,字體,字體大小作爲從本機操作系統調用的窗口的其餘部分

  • AFAIK物質可以做到這一點,看看它的code source, ref. post by (-:forked new Owner:-)

1

嗯,這是可能裝飾JFrameJDialog甚至JWindow用自己的大號&女,但我不知道,合成器可以做到這一點。至少我沒有找到任何有關這方面的信息。

大號&˚F樣物質,咸陽市和其他人使用一個小騙子裝飾JFrameJDialog - 當setDefaultLookAndFeelDecorated設置爲true JRootPane的UI禁用本地幀/對話框裝飾,只是顯示了自己的風格。此外,非透明框架/對話框等一些本地功能在這種情況下非常方便,並且使您感覺窗口實際上以不同的樣式進行了裝飾(如果沒有這些功能,則無法創建出色的窗簾效果)。

+0

和那些嘗試不[在默認情況下Java7中工作](http://stackoverflow.com/questions/16219111/cant-transparent-and-undecorated-jframe-in -jdk7-when-enable-nimbus) – mKorbel 2013-05-14 11:06:32

+0

是的,由於某些原因,Java開發人員在Java 7及更高版本中禁用了此功能以用於裝飾框架和對話框(這非常愚蠢)。通過在JDK 7和更高版本中查看java.awt.Dialog或java.awt.Frame的setOpacity(float opacity)方法源,可以很容易地確認這一點。 – 2013-05-14 13:15:33