JavaFX 2 XYChart.Series和setOnMouseEntered

时间:2012-04-18 14:58:04

标签: event-handling javafx

是否可以将XYChart.Series的实例设置为对setOnMouseEntered执行操作?在我看来,使其工作的一个前提条件是实现EventTarget接口。至于JavaFX XYChart.Series我想在光标触及黄线(XYChart.Series的实例)时突出显示以下数据系列:
http://docs.oracle.com/javafx/2.0/charts/img/line-series.png
更确切地说,我想做以下但是例如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 个答案:

答案 0 :(得分:3)

Lookup相应的节点,并添加您想要的事件处理程序。

这是一个例子。

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