java - JavaFX ScatterChart Does not display legend symbol when initialized with empty dataset -


i have scatterchart want initialize empty dataset; however, when initialize everything, legend symbol never show up. have mocked problem using scatterchart example oracle:

import javafx.application.application; import javafx.collections.fxcollections; import javafx.collections.observablelist; import javafx.scene.scene; import javafx.scene.chart.numberaxis; import javafx.scene.chart.scatterchart; import javafx.scene.chart.xychart; import javafx.stage.stage;   public class scatterchartsample extends application {      @override public void start(stage stage) {         stage.settitle("scatter chart sample");         final numberaxis xaxis = new numberaxis(0, 10, 1);         final numberaxis yaxis = new numberaxis(-100, 500, 100);                 final scatterchart<number,number> sc = new             scatterchart<>(xaxis,yaxis);         xaxis.setlabel("age (years)");                         yaxis.setlabel("returns date");         sc.settitle("investment overview");         observablelist<xychart.data> data =                    fxcollections.observablearraylist();         xychart.series series1 = new xychart.series();         series1.setname("equities");         series1.setdata(data);          xychart.series series2 = new xychart.series();         series2.setname("mutual funds");         series2.getdata().add(new xychart.data(5.2, 229.2));         series2.getdata().add(new xychart.data(2.4, 37.6));         series2.getdata().add(new xychart.data(3.2, 49.8));         series2.getdata().add(new xychart.data(1.8, 134));         series2.getdata().add(new xychart.data(3.2, 236.2));         series2.getdata().add(new xychart.data(7.4, 114.1));         series2.getdata().add(new xychart.data(3.5, 323));         series2.getdata().add(new xychart.data(9.3, 29.9));         series2.getdata().add(new xychart.data(8.1, 287.4));          sc.getdata().addall(series1, series2);         scene scene  = new scene(sc, 500, 400);         stage.setscene(scene);         stage.show();         xychart.series series3 = new xychart.series();         series3.setname("equities");         series1.getdata().add(new xychart.data(4.2, 193.2));     }      public static void main(string[] args) {         launch(args);     } } 

i post picture of result don't have enough rep.

the problem because dataset empty.

looking @ code in scatterchart.java (java 1.8u66) you'll see copy style class series on legend symbol if !series.getdata().isempty().

/**  * called whenever series added or removed , legend needs updated  */ @override protected void updatelegend() {     legend.getitems().clear();     if (getdata() != null) {         (int seriesindex=0; seriesindex< getdata().size(); seriesindex++) {             series<x,y> series = getdata().get(seriesindex);             legenditem legenditem = new legenditem(series.getname());             if (!series.getdata().isempty() && series.getdata().get(0).getnode() != null) {                 legenditem.getsymbol().getstyleclass().addall(series.getdata().get(0).getnode().getstyleclass());             }             legend.getitems().add(legenditem);         }     }     if (legend.getitems().size() > 0) {         if (getlegend() == null) {             setlegend(legend);         }     } else {         setlegend(null);     } } 

they need non-empty series copy because style attribute of data point instead of whole series you'd expect.

anyway, it's easy workaround. add data point before setting legend property , code called want. instance, this:

    rollseries.getdata().add(new xychart.data<>(0,0));     rollseries.setname("roll"); 

if you'll notice tutorials , examples preload data set. must not have test case covers empty series.


Comments

Popular posts from this blog

IF statement in MySQL trigger -

c++ - What does MSC in "// appease MSC" comments mean? -

javascript - Blogger related post gadget image Resize s72-c [ Need Expert Help ] -