Событие мыши при нажатии на заголовок данных в JavaFX - PullRequest
0 голосов
/ 07 января 2019

Я создал простую горизонтальную диаграмму, используя 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;
    }

Мне бы хотелось, чтобы при нажатии на путь запускалась функция, передающая выбранный путь.

...