Insert image into borderpane as background


Question

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?

P.S 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

P.S 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);
1
2
8/10/2013 7:20:39 PM

Accepted Answer

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 (e.g. 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);
        }
4
8/10/2013 7:24:58 PM

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon