首页 文章

JavaFX显示场景背景图像

提问于
浏览
2

我正在使用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链接,似乎都失败了:

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

4 回答

  • 0

    我在NetBeans中遇到了同样的问题,基本上都尝试了一切 . 最后,我发现文件扩展名“jpg”在NetBeans左侧的“项目层次结构框”中以大写字母书写 .

    我将我的代码中的那部分改为所有大写字母和tadaaa一切正常 .

  • 0

    这对我来说很好用.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文件位于同一目录中 . 代码中的主要'change'注意到 scene.getStyleSheet() 我使用了对样式/而不仅仅是资源的引用 .

    我希望这有帮助!

    有一点需要注意:我正在编译32位jdk 7.0_45 . 这不应该有任何区别,但确实如此 .

  • 2

    部分归功于WillBD的答案,我决定抛弃Eclipse Kepler并在Netbeans中重新开始 . 我使用了我在问题中提供的完全相同的代码,现在一切正常 . 我想这是JavaFX和Eclipse Kepler之间的一个错误 .

  • 0

    图像文件必须位于“bin / application”目录中,并将css定义添加到“src / application / filename.css”

相关问题