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
Post a Comment