2012-04-18 6 views
3

XYChart.SeriesのインスタンスをsetOnMouseEnteredで動作させることはできますか?それを動作させるための前提条件の1つは、EventTargetインターフェイスを実装することです。 JavaFX XYChart.Seriesについては、カーソルが黄色の線(XYChart.Seriesのインスタンス)に接触したときに、次のデータ系列を強調したいと思います。
http://docs.oracle.com/javafx/2.0/charts/img/line-series.png
もっと正確には、XYChartの例をしたいと思います。シリーズではないボタン:JavaFX 2 XYChart.SeriesとsetOnMouseEntered

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*/ 
} 

答えて

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

すばらしい例です。私はJavaFXの観点からそのテクニックをキャスティングすることを知らなかった。どうもありがとうございました! – inzzz