Stroke-border issues
David Grieve
david.grieve at oracle.com
Thu Jun 20 11:01:17 PDT 2013
Try '-fx-border-style solid inside;'
On Jun 20, 2013, at 1:26 PM, Richard Bair <richard.bair at oracle.com> wrote:
> 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