2013-05-14 13 views
2

Synth-Framework를 사용하여 사용자 정의 Look-And-Feel을 만들려고합니다.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> 

코드를 내가

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 다음 LAF는 다음과 같습니다로드하는 데 사용 그렇지 않습니다.

Synth-XML을 사용하여 Window/JFrame을 스킨/장식하는 방법에 대한 정보를 찾지 못했습니다. 누군가 나를 도와 줄 수 있습니까?

+0

+1 synth :-) – mKorbel

답변

1
  • AFAIK는 자신의 L과 JFrame/JDialog/JWindow를 장식 할 수 없습니다 & F

  • JFrame/JDialog/JWindow 동료에, 기본 OS에서 온을 기반으로 기본적으로는 같은 장식 유형이로 색상, 글꼴,

  • AFAIK 물질이 할 수있는 기본 OS에서 호출 윈도우의 나머지 부분과 글꼴 크기의 code source, ref. post by (-:forked new Owner:-)

    에서 봐
1

글쎄, 그것은 자신의 L & F와 JFrame, JDialog 심지어 JWindow을 장식하는 것이 가능입니다,하지만 난 신디가 그렇게 할 수 있는지 모르겠습니다. 적어도 그것에 관한 어떤 정보도 찾지 못했습니다.

L 물질과 같은 & F는 Synthetica 등은 JFrameJDialog 장식하는 작은 속임수를 사용 - setDefaultLookAndFeelDecoratedtrue JRootPane의 UI로 설정되어 기본 프레임/대화 장식을 사용하지 않도록 설정하고 간단하게 자신의 스타일을 표시합니다. 또한 불투명하지 않은 프레임/대화 상자와 같은 일부 기본 기능은이 경우 매우 편리하며 창은 실제로 다른 스타일로 장식됩니다 (이러한 기능 없이는 좋은 창 음영 효과를 만들 수 없음).

+0

와 함께 괴롭 히고 그 시도는 [Java7에서 기본적으로 작동하지 않습니다] (http://stackoverflow.com/questions/16219111/cant-transparent-and-undecorated-jframe-in -jdk7-when-enabling-nimbus) – mKorbel

+0

그래, 몇 가지 이유로 Java 개발자는 Java 7 및 그 이후의 장식 프레임 및 대화 상자에서이 기능을 사용하지 않도록 설정했습니다 (이는 꽤 멍청합니다). JDK 7 이후 버전에서는'java.awt.Dialog' 또는'java.awt.Frame'' setOpacity (float opacity)'메소드 소스를 살펴보면 쉽게 확인할 수 있습니다. –