2013-08-10 4 views
2

Я хочу загрузить изображение в BorderPane. У меня есть статический метод Java, который делает эту задачу более сложной для меня:Вставить изображение в рамку в качестве фона

private static final Image iv;  
    static { 
     iv = new Image(StartPanel.class.getClass().getResource("/images/system-help.png").toExternalForm()); 
    } 

public static void insert(){ 

    bp.setCenter(iv); 
} 

Можете ли вы рассказать мне, как правильно загрузить изображение?

P.S Я получаю

Executing com.javafx.main.Main from /home/rcbandit/Desktop/test/DX-57DC/dist/run1833589211/DX-57DC.jar using platform /opt/jdk1.7.0_25/bin/java 
Exception in Application start method 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.javafx.main.Main.launchApp(Main.java:642) 
    at com.javafx.main.Main.main(Main.java:805) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:403) 
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47) 
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115) 
    at java.lang.Thread.run(Thread.java:724) 
Caused by: java.lang.NullPointerException 
    at com.dx57dc.stages.StartPanel.infrastructureIcon(StartPanel.java:241) 
    at com.dx57dc.stages.StartPanel.navigationPanel(StartPanel.java:138) 
    at com.dx57dc.stages.StartPanel.agentsPanel(StartPanel.java:78) 
    at com.dx57dc.stages.Agents.agentsPanel(Agents.java:9) 
    at com.dx57dc.main.DX57DC.initMainStage(DX57DC.java:287) 
    at com.dx57dc.main.DX57DC.start(DX57DC.java:115) 
    at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319) 
    at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:215) 
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179) 
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:176) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:176) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76) 
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) 
    at com.sun.glass.ui.gtk.GtkApplication$3$1.run(GtkApplication.java:82) 
    ... 1 more 
Java Result: 1 

P.S 2 мне удалось загрузить изображение с этим кодом:

private static final ImageView iv;  
     static { 
      iv = new ImageView(StartPanel.class.getResource("/com/dx57dc/images/6.jpg").toExternalForm()); 
     } 

borderpane.setCenter(iv); 
+0

вы имеете в виду, как загрузить изображение в JavaFX или эту проблему, чтобы получить изображение, показанное? –

+0

Возможно, у меня эти две проблемы. –

+0

Вы хотите получить фон в центре или он должен быть во всех областях? –

ответ

5

Я получил его на работу. Вам даже не нужно обрабатывать нагрузку на изображение. Фокус в том, чтобы использовать свойство стиля:

borderpane.setStyle("-fx-background-image: url(\"/images/system-help.png\");-fx-background-size: 500, 500;-fx-background-repeat: no-repeat;") 

Обязательно вы должны передать файл css на аутсорсинг и не использовать встроенные стили. Это просто проще показать.

Если вы просто хотите установить фон из центральной зоны используйте:

borderpane.getCenter().setStyle("-fx-background-image: url(\"/images/system-help.png\");-fx-background-size: 500, 500;-fx-background-repeat: no-repeat;") 

Примечание:
system-help.png расположен в /images каталоге, который находится на том же уровне, что и файл класса для приложение (например, используя eclipse, оно должно быть сохранено в папке bin, что означает, что вы добавляете папку (например, называете ее ресурсами) в свой проект и используете ее как source folder в этой папке, чем вам понадобится папка с изображениями. странно, но это то, как fx нуждается в этом).

Edit: Изменение размера следующим образом:

private static final ImageView iv;  
static { 
      iv = new ImageView(StartPanel.class.getResource("/com/dx57dc/images/6.jpg").toExternalForm()); 
      iv.resize(100, 100); 
     } 
+0

@PeterPenzov это сработало для вас? –

+0

Я получаю NPE, когда загружаю изображение. Может быть, мне нужно использовать старый способ в своем посте. –

+0

как вы можете получить NPE? java fx никогда не бросает NPE при загрузке изображения через css, просто игнорируя атрибут. Вы, должно быть, сделали что-то не так в другом месте. –

Смежные вопросы