Как использовать SynthLookAndFeel с файлом XML, где путь к файлу XML будет загружать файл с использованием метода getResourceAsStream?
Я использую
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")
где я хотел избежать использования статического пути, показанного в примере.
Следовать за:
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
пакет.
пожалуйста, проверьте, особенно ответ
@trashgod
показывает основные вещи, но с отличным обходом кода для BasicXxxUIЯ бы использовал
Nimbus Look and Feel
скорее доисторический и простойSynth
,Nimbus
есть похожие проблемы с GUI, дааа и еще несколько ошибок,Nimbus
(на основе простогоSynt
) может быть проще всего, и вокруг нас есть несколько отличных хаков
Вы также можете добавить файл XML, передав весь путь файла
например
SynthLookAndFeel laf = new SynthLookAndFeel();
laf.load(new URL("file:///D:/Demo/src/example1.xml"));
UIManager.setLookAndFeel(laf);
Меня устраивает. Попробуйте это для вашего приложения