2

ステートメント 1 は CSS から画像ファイルを取得し、絶対 URL を指定しても画像ファイルを見つけることができません。なんで?

ステートメント 3 で動作するため、イメージ ファイルの場所は正しいです。これは、jewelsea によって投稿されたソリューションのさらなるクエリです。

import javafx.scene.image.Image;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class TextFieldCssSample extends Application {

    @Override
    public void start(Stage stage) {
        TextField textField = new TextField();
        textField.setId("textField");
        StackPane layout = new StackPane();
        layout.getChildren().addAll(textField);
        // 1) following statement **fails**. resources folder is below the root level folder
        textField.setStyle("-fx-border-color: red; -fx-background-image:url('/resources/pumpkin-icon.png'); -fx-background-repeat: no-repeat; -fx-background-position: right center;");
        // 2) following statement succeeds in finding a http url. 
        //    textField.setStyle("-fx-border-color: red; -fx-background-image:url('http://icons.iconarchive.com/icons/rockettheme/halloween/32/pumpkin-icon.png'); -fx-background-repeat: no-repeat; -fx-background-position: right center;");
        // 3) following statement succeeds finding image file. 
        stage.getIcons().add(new Image("/resources/pumpkin-icon.png"));
        stage.setScene(new Scene(layout));
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

更新: cnahr の回避策が機能しました! また、JavaFX バグ レポートを開きました。RT-31131

4

1 に答える 1

2

インライン CSS URL の先頭のスラッシュを省略します。

真剣に。少し実験したところ、(1) のようなインライン CSS 内で完全なURL が相対URLとして指定された場合にのみ、JAR に埋め込まれた画像が読み込まれることがわかりました。

ただし、(3) のように Image コンストラクターを使用すると、先頭のスラッシュを省略または含めることができます。画像は問題なくロードされます。

JavaFX CSS パーサーのバグを発見したと思います。:)


注: RT-31131 Java FX2 コードのインライン CSS ステートメントは、 RT-21697 CSS: Absolute paths in url("...") without a scheme shouldの複製として閉じられている場合、絶対パスが使用されている場合に画像ファイルを見つけることができません。これはJava 8 リリースで解決されたため、CSS 処理エラーは後の JavaFX リリースで修正されました。

于 2013-06-15T05:34:05.943 に答える