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