I want to load image into BorderPane. I have a static Java method which makes this task more complicated for me:
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);
}
Can you tell me how I can load the image properly?
PS I get this
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
PS 2 I managed to load the image with this code:
private static final ImageView iv;
static {
iv = new ImageView(StartPanel.class.getResource("/com/dx57dc/images/6.jpg").toExternalForm());
}
borderpane.setCenter(iv);
I got it to work. You not even need to handle the image load. The trick is to use the style property:
borderpane.setStyle("-fx-background-image: url(\"/images/system-help.png\");-fx-background-size: 500, 500;-fx-background-repeat: no-repeat;")
For sure you should outsource the css file and not use inline styles. It's just easier to show.
If you just want to set the background of the center area use this:
borderpane.getCenter().setStyle("-fx-background-image: url(\"/images/system-help.png\");-fx-background-size: 500, 500;-fx-background-repeat: no-repeat;")
Note:
The system-help.png
is located in the /images
directory, which is at the same level as the class file for the application (eg using eclipse it must be stored in the bin
folder, which means you add a folder (for example call it resources) to your project and use it as a source folder
, in this folder than you will need the image folder. Kinda weird but thats how fx
needs it).
Edit: Resize as following:
private static final ImageView iv;
static {
iv = new ImageView(StartPanel.class.getResource("/com/dx57dc/images/6.jpg").toExternalForm());
iv.resize(100, 100);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.