JavaFX 2 XYChart.Series and setOnMouseEntered

天大地大妈咪最大 提交于 2019-12-06 06:57:00

问题


Is it possible to set instance of XYChart.Series to act on setOnMouseEntered? It seems to me that one precondition to make it work would be to implement EventTarget interface. As for JavaFX XYChart.Series I would like to highlight the following data series when cursor touches the yellow line (instance of XYChart.Series):
http://docs.oracle.com/javafx/2.0/charts/img/line-series.png
To be more precise I would like to do the following but for instance of XYChart.Series not Button:

public class Temp {
    /*code removed*/
    Button btn = new Button("Button to touch");
    btn.setOnMouseEntered(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent e) {
            System.out.println("Cursor just touched the button!");
        }
    });
    /*code removed*/
}

回答1:


Lookup the appropriate nodes and add the event handlers you want to them.

Here is an example.

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.*;
import javafx.scene.chart.*;
import javafx.scene.effect.Glow;
import javafx.scene.input.MouseEvent;
import javafx.scene.shape.Path;
import javafx.stage.Stage;

public class LineChartSample extends Application {
  @Override public void start(Stage stage) {
    //create the chart
    final NumberAxis xAxis = new NumberAxis();
    final NumberAxis yAxis = new NumberAxis();
    xAxis.setLabel("Number of Month");
    final LineChart<Number, Number> lineChart = new LineChart<>(xAxis, yAxis);
    lineChart.setTitle("Stock Monitoring, 2010");
    XYChart.Series series = new XYChart.Series();
    series.setName("My portfolio");
    series.getData().addAll(new XYChart.Data(1, 23),new XYChart.Data(2, 14),new XYChart.Data(3, 15),new XYChart.Data(4, 24),new XYChart.Data(5, 34),new XYChart.Data(6, 36),new XYChart.Data(7, 22),new XYChart.Data(8, 45),new XYChart.Data(9, 43),new XYChart.Data(10, 17),new XYChart.Data(11, 29),new XYChart.Data(12, 25));
    lineChart.getData().add(series);

    // show the scene.
    Scene scene = new Scene(lineChart, 800, 600);
    stage.setScene(scene);
    stage.show();

    // make the first series in the chart glow when you mouse over it.
    Node n = lineChart.lookup(".chart-series-line.series0");
    if (n != null && n instanceof Path) {
      final Path path = (Path) n;
      final Glow glow = new Glow(.8);
      path.setEffect(null);
      path.setOnMouseEntered(new EventHandler<MouseEvent>() {
        @Override public void handle(MouseEvent e) {
          path.setEffect(glow);
        }
      });
      path.setOnMouseExited(new EventHandler<MouseEvent>() {
        @Override public void handle(MouseEvent e) {
          path.setEffect(null);
        }
      });
    }
  }
  public static void main(String[] args) { launch(args); }
}


来源:https://stackoverflow.com/questions/10212147/javafx-2-xychart-series-and-setonmouseentered

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!