我正在 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 链接,似乎都失败了:
- JavaFX How to set scene background image (呈现空白屏幕)
- Setting background image by javafx code (not css)异常(exception))
- Cannot load image in JavaFX
- 还有更多。
奇怪的是,当我从服务器提供图像作为超链接时,一切正常。但提供本地文件的路径永远不会起作用。我究竟做错了什么?有人可以告诉我如何显示本地镜像吗?这是一个错误吗?
请您参考如下方法:
对于我来说,这对 .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 进行编译。这应该没有什么区别,但确实如此。