Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaLAF:如何使用SynthXML创建装饰?_Java_Swing_Look And Feel_Synth_Window Decoration - Fatal编程技术网

JavaLAF:如何使用SynthXML创建装饰?

JavaLAF:如何使用SynthXML创建装饰?,java,swing,look-and-feel,synth,window-decoration,Java,Swing,Look And Feel,Synth,Window Decoration,我正在尝试使用Synth框架创建自定义的外观 我成功地使用了教程( )进行试验,并设法对按钮、面板等进行蒙皮 我现在的问题是,我想装饰一下窗户/窗框 我读了一些关于它的文章,并用MetalLookAndFeel和以下代码进行了尝试: try{ UIManager.setLookAndFeel(new MetalLookAndFeel()); }catch(UnsupportedLookAndFeelException e){ } javax.sw

我正在尝试使用Synth框架创建自定义的外观

我成功地使用了教程( )进行试验,并设法对按钮、面板等进行蒙皮

我现在的问题是,我想装饰一下窗户/窗框

我读了一些关于它的文章,并用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>
按钮和面板会被剥皮,但当然,窗口/框架不会

我就是找不到关于如何使用SynthXML对窗口/JFrame进行蒙皮/装饰的源代码。 有人能帮我吗?

  • AFAIK无法用自己的L&F装饰
    JFrame
    /
    JDialog
    /
    JWindow

  • JFrame
    /
    JDialog
    /
    JWindow
    基于来自本机操作系统的对等方,默认情况下,与从本机操作系统调用的其余窗口具有相同的颜色、字体、字体大小

  • 一种物质可以做到这一点,看看它的


嗯,可以用您自己的L&F装饰
JFrame
JDialog
,甚至
JWindow
,但我不确定Synth是否能做到这一点。至少我没有找到任何关于那件事的信息


类似L&F的Substance、Synthetica和其他公司使用一个小欺骗来装饰
JFrame
JDialog
——当
setDefaultLookAndFeelDecorated
设置为
true
JRootPane UI禁用本机框架/对话框装饰,并简单地显示自己的样式。此外,一些本机功能(如非不透明框架/对话框)在这种情况下非常方便,让您感觉窗实际上是用不同的样式装饰的(没有这些功能,您无法创建良好的窗阴影效果)。

+1因为需要使用synth:-)而这些尝试没有成功,出于某种原因,Java开发人员在Java7和更高版本中禁用了装饰框架和对话框的此功能(这在我看来相当愚蠢)。通过查看JDK 7及更高版本中的
java.awt.Dialog
java.awt.Frame
setOpacity(float opacity)
方法源代码,可以很容易地确认这一点。
    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);