2017-04-25 5 views
0

SWF RCPアプリケーション用にFXCanvasに表示されるラベル付きのJavaFxカスタムバーチャートがあります。私はバーグラフのノードにマウスイベントリスナーを追加するときHow to clear text added in a javafx barchart?JavaFxカスタムバーチャートマウスイベントではありません

のために掲載の答えのおかげでしかし、マウスイベントは、コード

の下の行にcreateBarChart内部

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を検出取得されていません

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クラスに変更すると、イベントが認識されます。カスタムBarChartマウスイベントが発生していない場合にのみ発生します。

私がこのユースケースを手伝ってくれたらと感謝します。 TIA

答えて

1

カスタムバーチャートは、TextFlowでSeries Dataを作成していました。以下はスニペットです

@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によってオーバーレイされています。 Nodeの代わりにTextFlowにリスナーを追加する必要がありました。以下の場合、カスタムバーチャートのスクリーンショット。

enter image description here

関連する問題