2013-12-20 149 views
2

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

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代替,但是没有任何效果。

我已经采取了看看其他几个计算器环节,似乎都失败:

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

+0

你说的图像来自超链接,它也是一个.jpg文件吗? – WillBD

+0

.jpg,.png,.gif,作为超链接提供时,所有常用图像格式都会正确显示。我只是不希望计算机依靠互联网连接来显示背景...... –

回答

0

部分地感谢WillBD的回答,我决定抛开Eclipse开普勒,并开始在Netbeans中进行。我使用了我在问题中提供的完全相同的代码,现在一切正常。我想这是JavaFX和Eclipse Kepler之间的一个错误。

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。这应该没有什么区别,但它就是这样。

+0

我创建了一个新项目,接管了您的代码,接管了您的文件夹结构,改为使用png文件...而我的背景像以往一样白。我认为这一定是Eclipse Kepler/JavaFX中的一个bug。我将下载netbeans,再试一次并在此发布结果。 –

+0

我意识到这是一个稍后期的后续行动,但您应该考虑将错误报告提交到Eclipse Kepler/JavaFX论坛,可能您发现了一个他们没有考虑过的情况,或者即使他们有这个情况,这很好当他们得到这样的事情的报道。只是一个想法:)我很高兴你能解决问题。 javafx的NetBeans支持是至高无上的。 – WillBD

0

图像文件必须的“bin /应用程序”目录,并添加你的CSS定义的“SRC /应用/ filename.css”

0

我在NetBeans中有同样的问题,基本上都试过了。最终,我发现文件扩展名“jpg”在NetBeans左侧的“项目层次结构框”中以大写字母书写。

我改变了我的代码的一部分到所有大写字母和tadaaa一切工作得很好。