gpt4 book ai didi

JavaFx自定义条形图鼠标事件未触发

转载 作者:行者123 更新时间:2023-12-02 13:19:47 28 4
gpt4 key购买 nike

我有一个 JavaFx 自定义条形图,其标签显示在 SWT RCP 应用程序的 FXCanvas 上。感谢 How to clear text added in a javafx barchart? 发布的答案

但是,当我将鼠标事件监听器添加到条形图的节点时,未检测到鼠标事件

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());

}
}
}

使用以下代码行在 createBarChart 中调用 addMouseListener

    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);

如果我将自定义条形图更改为 javafx.chart.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。下面是自定义条形图的屏幕截图。

enter image description here

关于JavaFx自定义条形图鼠标事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43622557/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com