Я создал свой собственный класс PieChart, чтобы создать свою собственную легенду, в моей программе pieChart, которая должна быть обновлена во время выполнения, и так же, как и в Legend, я знаю, что мой код не очень хорошо разработан, и я плохо использовал для решение получить то, что я хочу, но оно работает, и это частный проект, поэтому он не должен быть идеальным. В любом случае, это мой код:
public class CustomPieChart extends PieChart {
public ScrollPane scrollPane = new ScrollPane();
public Legend theLegend;
public CustomPieChart(ObservableList<PieChart.Data> data){
super(data);
setTitle("MyTitle");
setLegendSide(Side.RIGHT);
setLabelsVisible(false);
((Legend)getLegend()).setVertical(true);
((Legend)getLegend()).setPrefColumns(1);
}
private void createScrollableLegend(){
setStartAngle(180);
setLabelLineLength(20);
if(getLegend()!= null){
theLegend=(Legend) getLegend();
theLegend.setPrefWidth(130);
scrollPane.setContent(theLegend);
scrollPane.setHbarPolicy(ScrollBarPolicy.NEVER);
scrollPane.setVbarPolicy(ScrollBarPolicy.AS_NEEDED);
scrollPane.maxHeightProperty().bind(heightProperty());
setLegend(scrollPane);
}
}
public void refreshChart(ObservableList<PieChart.Data> data){
if(getData()!=null){
getData().clear();
}
//This is the only way I found to "refresh" the values of the legend
CustomPieChart tmp = new CustomPieChart(data);
setLegend((Legend)tmp.getLegend());
setData(data);
createScrollableLegend();
}
}
Я пытаюсь добиться прокручиваемой легенды, которая идет только по вертикали, вместо этого вот что я получил:
Как вы можете видеть, некоторые элементы отображаются за пределами панели ...
Будьте нежны, я довольно нуб ^^