If you run the attached snippet you'll notice that the CSS version is incorrect for all versions beside "left top".
package tests;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundImage;
import javafx.scene.layout.BackgroundPosition;
import javafx.scene.layout.BackgroundRepeat;
import javafx.scene.layout.BackgroundSize;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.BorderStrokeStyleBuilder;
import javafx.scene.layout.BorderWidths;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.PaneBuilder;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class CSSTest extends Application {
public static void main(String[] args) {
CSSTest.launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
VBox box = new VBox();
HBox p = new HBox();
String defaultStyle = "-fx-background-image: url(\"tests/build.png\");-fx-background-repeat: no-repeat;-fx-border-style: solid;-fx-border-width: 1px;-fx-border-color: black;";
String[] styles = {
"-fx-background-position: left 15 top 15;",
"-fx-background-position: right 15 top 15;",
"-fx-background-position: left 15 bottom 15;",
"-fx-background-position: right 15 bottom 15;"
};
for( String style : styles ) {
p.getChildren().add(PaneBuilder.create().style(style +defaultStyle).children(new Label(style)).build());
}
VBox.setVgrow(p, Priority.ALWAYS);
box.getChildren().add(p);
p = new HBox();
Side[][] sides = {
{ Side.LEFT, Side.TOP },
{ Side.RIGHT, Side.TOP },
{ Side.LEFT, Side.BOTTOM },
{ Side.RIGHT, Side.BOTTOM }
};
for( Side[] side : sides ) {
Background bg = new Background(
new BackgroundImage(new Image(getClass().getResource("build.png").toExternalForm()),
BackgroundRepeat.NO_REPEAT,
BackgroundRepeat.NO_REPEAT,
new BackgroundPosition(side[0], 15, false, side[1], 15, false),
BackgroundSize.DEFAULT));
BorderStrokeStyle bs = BorderStrokeStyleBuilder.create().miterLimit(1).build();
Border border = new Border(
new BorderStroke(Color.BLACK, Color.BLACK, Color.BLACK, Color.BLACK,
bs, bs, bs, bs,CornerRadii.EMPTY, new BorderWidths(2), new Insets(0.0)));
Pane pane = PaneBuilder.create().background(bg).border(border).build();
pane.getChildren().add(new Label("hello world"));
p.getChildren().add(pane);
}
VBox.setVgrow(p, Priority.ALWAYS);
box.getChildren().add(p);
Scene s = new Scene(box,400,400);
s.getStylesheets().add(getClass().getResource("my.css").toExternalForm());
primaryStage.setScene(s);
primaryStage.show();
}
}
package tests;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundImage;
import javafx.scene.layout.BackgroundPosition;
import javafx.scene.layout.BackgroundRepeat;
import javafx.scene.layout.BackgroundSize;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.BorderStrokeStyleBuilder;
import javafx.scene.layout.BorderWidths;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.PaneBuilder;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class CSSTest extends Application {
public static void main(String[] args) {
CSSTest.launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
VBox box = new VBox();
HBox p = new HBox();
String defaultStyle = "-fx-background-image: url(\"tests/build.png\");-fx-background-repeat: no-repeat;-fx-border-style: solid;-fx-border-width: 1px;-fx-border-color: black;";
String[] styles = {
"-fx-background-position: left 15 top 15;",
"-fx-background-position: right 15 top 15;",
"-fx-background-position: left 15 bottom 15;",
"-fx-background-position: right 15 bottom 15;"
};
for( String style : styles ) {
p.getChildren().add(PaneBuilder.create().style(style +defaultStyle).children(new Label(style)).build());
}
VBox.setVgrow(p, Priority.ALWAYS);
box.getChildren().add(p);
p = new HBox();
Side[][] sides = {
{ Side.LEFT, Side.TOP },
{ Side.RIGHT, Side.TOP },
{ Side.LEFT, Side.BOTTOM },
{ Side.RIGHT, Side.BOTTOM }
};
for( Side[] side : sides ) {
Background bg = new Background(
new BackgroundImage(new Image(getClass().getResource("build.png").toExternalForm()),
BackgroundRepeat.NO_REPEAT,
BackgroundRepeat.NO_REPEAT,
new BackgroundPosition(side[0], 15, false, side[1], 15, false),
BackgroundSize.DEFAULT));
BorderStrokeStyle bs = BorderStrokeStyleBuilder.create().miterLimit(1).build();
Border border = new Border(
new BorderStroke(Color.BLACK, Color.BLACK, Color.BLACK, Color.BLACK,
bs, bs, bs, bs,CornerRadii.EMPTY, new BorderWidths(2), new Insets(0.0)));
Pane pane = PaneBuilder.create().background(bg).border(border).build();
pane.getChildren().add(new Label("hello world"));
p.getChildren().add(pane);
}
VBox.setVgrow(p, Priority.ALWAYS);
box.getChildren().add(p);
Scene s = new Scene(box,400,400);
s.getStylesheets().add(getClass().getResource("my.css").toExternalForm());
primaryStage.setScene(s);
primaryStage.show();
}
}
- duplicates
-
JDK-8124334 Broken interpretation of || in converter (e.g. -fx-background-position)
-
- Closed
-