【问题标题】:JavaFx Custom Bar Chart Mouse Event not triggeringJavaFx自定义条形图鼠标事件未触发
【发布时间】:2017-04-25 23:25:40
【问题描述】:

我有一个 JavaFx 自定义条形图,其标签显示在 FXCanvas 上,用于 SWT RCP 应用程序。感谢为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);

如果我将自定义 BarChart 更改为 javafx.chart.BarChart 类,则可以识别事件。仅用于自定义 BarChart 鼠标事件不会触发。

感谢是否有人可以帮助我解决这个用例。 TIA

【问题讨论】:

    标签: java javafx charts swt bar-chart


    【解决方案1】:

    自定义条形图正在使用 TextFlow 创建系列数据。下面是sn-p

        @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。下面是自定义条形图的截图。

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 2019-06-18
      • 1970-01-01
      • 2016-12-09
      • 2019-09-09
      • 1970-01-01
      • 2012-11-26
      • 2016-08-16
      • 1970-01-01
      相关资源
      最近更新 更多