Skip to main content
 首页 » 编程设计

image中JavaFX显示场景背景图片

2024年11月01日10jackei

我正在 Eclipse Kepler 上使用 Java SDK1.7.0_45 的内置 FX 库开发 JavaFX 应用程序。我想在场景中显示背景图像。按照 Java 文档中提供的教程,以下代码应该可以工作:

public class Main extends Application { 
    public static void main(String[] args) { 
    Application.launch(args); 
    } 
 
    @Override 
    public void start(Stage primaryStage) { 
    GridPane grid = new GridPane(); 
    Scene scene = new Scene(grid, 300, 275); 
    primaryStage.setScene(scene); 
    scene.getStylesheets().add(Main.class.getResource("Login.css").toExternalForm()); 
    primaryStage.show(); 
    } 

}

我的 CSV 文件如下所示:

.root { 
 -fx-background-image: url("background.jpg"); 

}

但我只是得到一个空白屏幕。我在 src/application 文件夹中有 3 个文件:background.jpg、Main.java 和 Login.css。

我尝试添加反斜杠,将图像放入单独的文件夹中,提供绝对路径,提供多种类型的图像,使用../application/background.jpg,将代码更改为 file:background.jpg,提供将 URL 直接插入代码并忽略 CSS 文件,使用 imageview 代替,......但没有任何效果。

我查看了其他几个 stackoverflow 链接,似乎都失败了:

奇怪的是,当我从服务器提供图像作为超链接时,一切正常。但提供本地文件的路径永远不会起作用。我究竟做错了什么?有人可以告诉我如何显示本地镜像吗?这是一个错误吗?

请您参考如下方法:

对于我来说,这对 .png 来说效果很好,与你相比,我唯一明显的区别是我将 .css 文件和我的 background.png 分割成主文件的子包。示例:

我的目录结构如下:

sotestproject ----| 
                  | 
                  |---package sotestProject ---SOTestProject.java 
                                    | 
                                    | 
                                    | 
                                    | 
                               package sotestProject.style 
                                           | 
                                           |---Login.css 
                                           | 
                                           |---background.png 

使用此分割,以下包含代码的文件成功生成了带有图像的背景:

SoTestProject.java:

package sotestproject; 
 
import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.GridPane; 
import javafx.stage.Stage; 
 
/** 
 * 
 * @author William 
 */ 
public class SOTestProject extends Application { 
 
    @Override 
    public void start(Stage primaryStage) { 
            GridPane grid = new GridPane(); 
            Scene scene = new Scene(grid, 300, 275); 
            primaryStage.setScene(scene); 
            scene.getStylesheets().add(SOTestProject.class.getResource("style/Login.css").toExternalForm()); 
            primaryStage.show(); 
    } 
 
    /** 
     * The main() method is ignored in correctly deployed JavaFX application. 
     * main() serves only as fallback in case the application can not be 
     * launched through deployment artifacts, e.g., in IDEs with limited FX 
     * support. NetBeans ignores main(). 
     * 
     * @param args the command line arguments 
     */ 
    public static void main(String[] args) { 
        launch(args); 
    } 
 
} 

登录.css:

.root { 
    -fx-background-image: url("background.png"); 
} 

显然我的background.png 与.css 文件位于同一目录中。代码中的主要“变化”是要注意,在 scene.getStyleSheet() 中,我使用了对 style/的引用,而不仅仅是资源。

希望这会有所帮助!

需要注意的一件事:我正在针对 32 位 jdk 7.0_45 进行编译。这应该没有什么区别,但确实如此。