我正在使用Java SDK1.7.0_45中的内置FX库在Eclipse Kepler上开发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链接,似乎都失败了:
奇怪的是,当我从服务器提供图像作为超链接时,一切正常。提供本地文件的路径永远不会工作。我究竟做错了什么?有人可以告诉我如何显示本地图像吗?这是一个错误吗?
答案 0 :(得分:2)
这对我来说很好用.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);
}
}
Login.css:
.root {
-fx-background-image: url("background.png");
}
然后显然我的background.png与.css文件位于同一目录中。代码中的主要“改变”是注意到scene.getStyleSheet()
使用了对style /而不仅仅是资源的引用。
我希望这有帮助!
有一点需要注意:我正在编译32位jdk 7.0_45。这不应该有任何区别,但确实如此。
答案 1 :(得分:0)
部分归功于WillBD的回答,我决定抛弃Eclipse Kepler并在Netbeans中重新开始。我使用了我在问题中提供的完全相同的代码,现在一切正常。我想这是JavaFX和Eclipse Kepler之间的一个错误。
答案 2 :(得分:0)
图像文件必须位于“bin / application”目录中,并将css定义添加到“src / application / filename.css”
答案 3 :(得分:0)
我在NetBeans中遇到了同样的问题并且基本上尝试了所有方法。最后,我发现文件扩展名“jpg”是用大写字母写在NetBeans左侧的“项目层次结构框”中。
我将我的代码中的那部分改为所有大写字母,tadaaa一切正常。