如何将SynthLookAndFeel与xml文件一起使用,其中xml文件路径将使用getResourceAsStream方法加载文件?

时间:2012-07-19 15:51:31

标签: java swing jslider synth

我正在使用

SynthLookAndFeel laf = new SynthLookAndFeel();
laf.load(MyJSlider.class.getResourceAsStream("/ui/demo.xml"), MyJSlider.class);      
//laf.load(new URL("file:///var/tmp/demo.xml"));

我的demo.xml包含以下内容:

<style id="SliderTrackStyle">
    <opaque value="TRUE"/>
    <state>
      <imagePainter method="SliderTrackBackground" path="/var/tmp/JavaUnitTest/src/image/menu/bg.jpg" sourceInsets="0 0 0 0" />
    </state>
</style>
<bind style="SliderTrackStyle" type="region" key="SliderTrack" />

导致错误:

run-single:
Uncaught error fetching image:
java.lang.NullPointerException
    at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:115)
    at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:125)
    at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:263)
    at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
    at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)
BUILD STOPPED (total time: 9 seconds)

避免风险较小。

我如何像path=Menu.class.getResourceAsStream("/image/menu/bg.jpg")一样使用它,我想避免使用示例中显示的静态路径。

跟进:

enter image description here

3 个答案:

答案 0 :(得分:3)

您可以在Advanced Synth中找到一个很好的例子。

您可以在示例中看到:

SynthLookAndFeel synth = new SynthLookAndFeel();
synth.load(SynthFrame.class.getResourceAsStream("demo.xml"), SynthFrame.class);
UIManager.setLookAndFeel(synth);

并且demo.xml位于demo.synth包中,与SynthFrame类相同,此XML包含:

<imageIcon id="check_off" path="images/checkbox_off.png"/>

checkbox_off.png包含在demo.synth.images包中。

答案 1 :(得分:3)

  1. to check,特别是@trashgod的回答显示基本的内容,但是BasicXxxUI的代码解决方法很棒

  2. 我会使用Nimbus Look and Feel而不是史前和Synth

  3. Nimbus还有类似GUI的问题,aaaa和一些错误,

  4. Nimbus(基于普通Synt)可能是最简单的方法,我们身边有几个很棒的黑客

答案 2 :(得分:1)

您还可以通过传递文件的整个路径

来添加XML文件

例如。

SynthLookAndFeel laf = new SynthLookAndFeel();
laf.load(new URL("file:///D:/Demo/src/example1.xml"));
UIManager.setLookAndFeel(laf);

它对我有用。试试你的应用