Я создал простую горизонтальную диаграмму, используя JavaFX в Java 1.8. Это отображается правильно с нижним условным обозначением, списком путей слева и столбцами, показывающими данные, сгруппированные в 3 серии. Я хотел бы открыть страницу, которая динамически заполняется на основе пути, выбранного с использованием пути слева, используемого в качестве ссылки, но я не смог найти способ создания события мыши при нажатии на этот текст данных.
В примере кода ниже текст, полученный методом getpath моего класса path, - это то, что я хотел бы превратить в ссылку.
Есть ли в любом случае, чтобы сделать это?
Я просмотрел документацию по классам BarChart и XYChart, но не могу найти способ получить значение заданного элемента на диаграмме, и даже если я не смог установить событие действия, потому что значение данных не похоже, есть определенный узел для установки события.
Выполнение этого с помощью кнопки и / или раскрывающегося списка работает как ожидалось, но я хотел бы использовать текст, встроенный в диаграмму, в качестве ссылки.
На большинство других похожих вопросов, на которые я ссылался, использовалась метка для заголовка, но в этом случае это не сработает, поскольку количество элементов в моем графике будет зависеть от набора данных, переданного в него.
//method for building chart
protected BarChart getChart(ObservableList<myClass> chartData) {
//Setup a horizontal barchart for displaying heat stats.
final NumberAxis xAxis = new NumberAxis();
final CategoryAxis yAxis = new CategoryAxis();
final BarChart<Number,String> bc =
new BarChart<Number,String>(xAxis,yAxis);
bc.setTitle("");
xAxis.setLabel("Ops");
xAxis.setTickLabelRotation(90);
yAxis.setLabel("NFS Exports with lock contention");
//Create series to hold data for each event type to show
XYChart.Series series1= new XYChart.Series();
series1.setName("Series1");
XYChart.Series series2= new XYChart.Series();
series2.setName("Series2");
XYChart.Series series3= new XYChart.Series();
series3.setName("Series3");
for (myClass path: chartData)
{
series1.getData().add(new XYChart.Data(path.getData1(), path.getPath()));
series2.getData().add(new XYChart.Data(path.getData2(), path.getPath()));
series3.getData().add(new XYChart.Data(path.getData3(), path.getPath()));
}
bc.getData().addAll(series1, series2, series3);
return bc;
}
//method for getting sample data
public ObservableList<myClass> getPathData()
{
ObservableList<myClass> exports = FXCollections.observableArrayList();
paths.add(new myClass("/path1", 12.0, 30.0, 62.0));
paths.add(new myClass("/path2", 20.0, 43.0, 82.0));
paths.add(new myClass("/path3", 0.0, 18.0, 23.0));
paths.add(new myClass("/path4", 40.0, 26.0, 75.0));
paths.add(new myClass("/path5", 8.0, 4.0, 5.0));
return paths;
}
Мне бы хотелось, чтобы при нажатии на путь запускалась функция, передающая выбранный путь.