Harshita Sethi
Harshita Sethi

Reputation: 2125

How to wrap text of a javafx chart legend

Can anyone please help me with wrapping the text in a legend of a javafx chart. I have pie charts and bar charts. All the legends are placed at bottom. I tried the following but couldn't get it working.

    for (Node node : pie.lookupAll(".chart-legend")) {
                if (node instanceof Text) {
                    System.out.println("Text instance");
                    ((Text) node).setWrappingWidth(380);
                    ((Text) node).setManaged(true);
                }
                if (node instanceof Label) {
                    System.out.println("Label instance");
                    ((Label) node).setWrapText(true);
                    ((Label) node).setManaged(true);
                    ((Label) node).setPrefWidth(380);
                }
  }

EDIT: See the highlighted part. Still some text is not visible.

enter image description here

Upvotes: 2

Views: 1987

Answers (2)

Harshita Sethi
Harshita Sethi

Reputation: 2125

I finally got it. Trying to wrap text in css didn't work as label width cannot be controlled there. So the following code can be used to wrap the text programmatically.

for (Node node : pie.lookupAll(".chart-legend-item")) {
                if (node instanceof Label) {
                    System.out.println("Label instance");
                    ((Label) node).setWrapText(true);
                    ((Label) node).setManaged(true);
                    ((Label) node).setPrefWidth(380);
                }
  }

Upvotes: 2

dzim
dzim

Reputation: 1153

Did you have a look at the CSS documentation? This link is refering to the chart legend section: JavaFX CSS Reference

As mentioned, it's of the type Label, so we can have a look here as well. -fx-wrap-text possibly does the trick. Of course you would need to write and attach your own CSS file to your program...

For a more detailed example, please refer to your JDKs jfxrt.jar, unzip it and look for the modena.css, which is the default CSS file.

Regards. Daniel

Edit: I got the following snipped to actually have an impact on or application after all:

.chart-legend {
   -fx-background-color:  transparent;
   -fx-padding: 20px;
}

.chart-legend-item-symbol {
   -fx-background-radius: 0;
}

.chart-legend-item {
    -fx-text-fill: #191970;
}

But it is important, where you place it in your CSS. In my first attempt, I placed it above the CSS rule, which set the default label text color. When I noticed this, I put it at the end of my CSS file: et vóila - it worked.

So please have a second look, that your placed accordingly in your own CSS.

Upvotes: 1

Related Questions