将图像插入borderpane作为背景

时间:2013-08-10 17:46:04

标签: java javafx-2 javafx javafx-8

我想将图片加载到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);

1 个答案:

答案 0 :(得分:4)

我得到了它的工作。您甚至不需要处理图像负载。诀窍是使用style属性:

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需要它的方式。)< / p>

编辑:调整大小如下:

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