Stroke-border issues
Richard Bair
richard.bair at oracle.com
Thu Jun 20 10:26:39 PDT 2013
I think what you're looking for is StrokeType: http://docs.oracle.com/javafx/2/api/javafx/scene/shape/StrokeType.html
On Jun 20, 2013, at 10:17 AM, Werner Lehmann <lehmann at media-interactive.de> wrote:
> Hi,
>
> I am experiencing some difficulties with border css. Not sure if those are bugs or "I am holding it wrong". The main problem is that I don't get a border to grow inside while keeping the bounds-in-parent unchanged. Maybe fx-border-insets is part of the solution but then I am not sure how this works (and the documentation does not say).
>
> http://s13.postimg.org/ujcl7lxt3/borders_and_bounds.png
>
> On this screenshot we have 5 StackPanes with prefSize 800x120 and different border css. The bottom three are highlighted by ScenicView to visualize their bounds.
>
> Observations:
>
> 1. fx-border-width changes bounds-in-parent. This may be normal if no other styles are set. But why is there some "empty margin" outside of the visible border? This can be seen very clearly in no.3: there is some space between the outside of the border and the outside of the yellow marked area.
>
> This is a problem because I am using bounds-in-parent to add some decoration to the node which obviously includes the empty space because of this.
>
> 2. An attempt to use -fx-border-insets can be seen in no.4. There is still some "margin" - and I already used insets 10 for a border-width 20 (with insets 20 the effect is even worse). How are those insets supposed to work?
>
> 3. An attempt to use an inside border does not really help either, see no.5.
>
> Rgds
> Werner
>
>
>> public class FxBorderIssues extends Application
>> {
>> public static void main(String[] args) { Application.launch(args); }
>>
>> public void start(Stage stage)
>> {
>> stage.setScene(SceneBuilder.create()
>> .width(1024)
>> .height(800)
>> .root(VBoxBuilder.create()
>> .spacing(30)
>> .fillWidth(false)
>> .alignment(Pos.CENTER)
>> .children(
>> createStackPane("-fx-border-width: 1; -fx-border-style: solid; -fx-border-color: #808080;"),
>> createStackPane("-fx-border-width: 10; -fx-border-style: solid; -fx-border-color: #808080;"),
>> createStackPane("-fx-border-width: 40; -fx-border-style: solid; -fx-border-color: #808080;"),
>> createStackPane("-fx-border-width: 20; -fx-border-style: solid; -fx-border-insets: 10; -fx-border-color: #808080;"),
>> createStackPane("-fx-border-width: 20; -fx-border-style: solid inside; -fx-border-color: #808080;"))
>> .build())
>> .build());
>> stage.show();
>> }
>>
>> private StackPane createStackPane(String style)
>> {
>> LabelBuilder builder = LabelBuilder.create().style("-fx-font-size: 16;");
>> Label labelStyle = builder.build();
>> StackPane.setAlignment(labelStyle, Pos.TOP_LEFT);
>> Label labelBounds = builder.build();
>> StackPane.setAlignment(labelBounds, Pos.BOTTOM_RIGHT);
>>
>> final StackPane stackPane = StackPaneBuilder.create()
>> .style(style)
>> .prefWidth(800)
>> .prefHeight(120)
>> .children(labelStyle, labelBounds)
>> .build();
>>
>> labelStyle.textProperty().bind(stackPane.styleProperty());
>> labelBounds.textProperty().bind(Bindings.createStringBinding(new Callable<String>() {
>> public String call() throws Exception
>> {
>> Bounds inLayout = stackPane.getLayoutBounds();
>> Bounds inParent = stackPane.getBoundsInParent();
>> return String.format(
>> "layout = (%.1f x %.1f), inParent = (%.1f x %.1f)",
>> inLayout.getWidth(), inLayout.getHeight(), inParent.getWidth(), inParent.getHeight());
>> }
>> }, stackPane.boundsInParentProperty(), stackPane.layoutBoundsProperty()));
>>
>> return stackPane;
>> }
>> }
>
>
>
More information about the openjfx-dev
mailing list