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);
}

你能告诉我如何正确加载图像吗?

PS我明白了

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 我设法使用以下代码加载图像:

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

borderpane.setCenter(iv);
4

1 回答 1

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需要它)。

编辑:调整如下:

private static final ImageView iv;    
static {
            iv = new ImageView(StartPanel.class.getResource("/com/dx57dc/images/6.jpg").toExternalForm());
            iv.resize(100, 100);
        }
于 2013-08-10T18:07:01.290 回答