2013-12-20 2 views
2

Java SDK1.7.0_45의 내장 FX 라이브러리를 사용하여 Eclipse Kepler에서 JavaFX 응용 프로그램을 개발 중입니다. 장면에 배경 이미지를 표시하고 싶습니다. 자바 문서에서 제공하는 튜토리얼에 이어, 다음 코드는 작동합니다 :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 폴더에 background.jpg, Main.java 및 Login.css의 3 개 파일이 있습니다.

나는 이미지를 별도의 폴더에 넣고, 절대 경로를 제공하고, ../application/background.jpg를 사용하여 몇 가지 유형의 이미지를 제공하고, 코드를 file : background.jpg로 바꾸어 보았습니다. URL에 직접 코드를 제공하고 CSS 파일을 닫고, 대신에 imageview를 사용하면 .....하지만 아무 것도 작동하지 않습니다.

이상한 일은 서버에서 하이퍼 링크로 이미지를 제공 할 때 모든 것이 정상적으로 작동한다는 것입니다. 로컬 파일에 대한 경로 제공은 결코 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 누군가 로컬 이미지를 표시하는 방법을 보여줄 수 있습니까? 이거 버그 야?

+0

하이퍼 링크에서 작동하는 이미지가 .jpg 파일입니까? – WillBD

+0

.jpg, .png, .gif, 하이퍼 링크로 제공되면 모든 공통 이미지 형식이 올바르게 표시됩니다. 컴퓨터가 단지 배경을 보여주기 위해 인터넷 연결에 의존하기를 원하지 않습니다. –

답변

0

WillBD의 대답 덕분에, 저는 Eclipse Kepler를 버리고 Netbeans에서 시작하기로 결정했습니다. 내 질문에 제공 한 것과 똑같은 코드를 사용했는데 이제는 모든 것이 잘 작동한다. 나는 이것이 JavaFX와 Eclipse Kepler 사이의 버그라고 생각한다.

2

.png를 사용하면 나에게 잘 돌아갔다. 필자가 반대로 생각한 유일한 차이점은 .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); 
    } 

} 

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

이 고장을 사용하여, 코드를 다음 파일이 성공적으로 이미지와 배경을 생산

Login.css :

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

그리고 분명히 내 background.png는 .css 파일과 같은 디렉토리에 있습니다. 코드의 주된 '변경'은 scene.getStyleSheet()을 사용하여 리소스 대신 스타일 /에 대한 참조를 사용했음을 알리는 것입니다.

도움이 되었기를 바랍니다.

한 가지주의 할 사항 : 저는 32 비트 jdk 7.0_45에 대해 컴파일하고 있습니다. 차이는 없어야하지만 거기에 있습니다.

+0

새로운 프로젝트를 만들었고, 코드를 사용하고, 폴더 구조를 대신 사용하고, 대신 png 파일을 사용했습니다 ... 그리고 내 배경은 그 어느 때보 다 하얀색입니다. 나는 이것이 Eclipse Kepler/JavaFX에서 버그가되어야한다고 생각한다. netbeans를 다운로드하고 다시 시도하고 결과를 게시하십시오. –

+0

이것이 약간 늦은 후속 조치라는 것을 알고 있지만 일식 Kepler/JavaFX 포럼에 가능한 버그 보고서를 제출해야합니다. 고려하지 않았던 사례를 찾거나 가능성이 있다고해도 가능합니다. 그들이 이런 일에 대한보고를받을 때. 그냥 생각 :) 당신은 그것이 효과가있어 기뻐요. javafx의 NetBeans 지원이 최고입니다. – WillBD

0

이미지 파일은 '빈/응용 프로그램의 디렉토리에 있어야하고'SRC/응용 프로그램/filename.css '내가 넷빈즈에서 같은 문제가 있었다 기본적으로 모든 것을 시도했습니다

0

에 CSS 정의를 추가해야합니다. 결국 NetBeans의 왼쪽에있는 "프로젝트 계층 구조 상자"에 파일 확장자 "jpg"가 대문자로 쓰여 있음을 발견했습니다.

내 코드의 일부를 대문자로 바꿨으며 모든 것이 잘 작동했습니다.

관련 문제