我正在使用
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")
一样使用它,我想避免使用示例中显示的静态路径。
跟进:
答案 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)
请to check,特别是@trashgod
的回答显示基本的内容,但是BasicXxxUI的代码解决方法很棒
我会使用Nimbus Look and Feel
而不是史前和Synth
,
Nimbus
还有类似GUI的问题,aaaa和一些错误,
Nimbus
(基于普通Synt
)可能是最简单的方法,我们身边有几个很棒的黑客
答案 2 :(得分:1)
您还可以通过传递文件的整个路径
来添加XML文件例如。
SynthLookAndFeel laf = new SynthLookAndFeel();
laf.load(new URL("file:///D:/Demo/src/example1.xml"));
UIManager.setLookAndFeel(laf);
它对我有用。试试你的应用