JavaFx自定义条形图鼠标事件不会触发
问题描述:
我有一个JavaFx自定义条形图,标签显示在FXCanvas上用于SWT RCP应用程序。感谢答案张贴How to clear text added in a javafx barchart?JavaFx自定义条形图鼠标事件不会触发
然而,当我加入鼠标事件侦听器,条形图的节点,是没有得到检测到鼠标事件
private void addMouseListener(XYChart.Series<String, Number> series) {
for (XYChart.Data<String, Number> xyData : series.getData()) {
if (xyData != null && xyData.getNode() != null) {
final Node node = xyData.getNode();
node.setOnMousePressed((MouseEvent event) -> {
System.out.println("you clicked " + xyData.toString());
}
}
}
调用addMouseListener将内部createBarChart下面行代码
BarChartExt barChart = new BarChartExt<String, Number>(xAxis, yAxis);
barChart.setTitle("Summary");
Scene scene = new Scene(barChart, 300, 300);
barChart.getData().add(series);
addMouseListener(series)
scene.getStylesheets().add("css/barchart.css");
canvas.setScene(scene);
如果我将Custom BarChart更改为javafx.chart.BarChart类,则会识别事件。只有自定义BarChart鼠标事件不会触发。
欣赏有没有人能帮助我处理这个用例。 TIA
答
自定义条形图使用TextFlow创建了系列数据。以下是摘录
@Override
protected void seriesAdded(Series<X, Y> series, int seriesIndex) {
super.seriesAdded(series, seriesIndex);
for (int j = 0; j < series.getData().size(); j++) {
Data<X, Y> item = series.getData().get(j);
Text text = new Text(String.valueOf(item.getYValue()););
text.setStyle("-fx-font-size: 10pt;");
TextFlow textFlow = new TextFlow(text);
textFlow.setTextAlignment(TextAlignment.CENTER);
nodeMap.put(item.getNode(), textFlow);
getPlotChildren().add(textFlow);
textFlow.setOnMousePressed((MouseEvent event) -> {
System.out.println("custom bar chart you clicked " + item);
});
}
}
由于系列数据节点被TextFlow覆盖。我不得不将侦听器添加到TextFlow而不是Node。以下是自定义条形图的屏幕截图。