2012-04-18 3 views
3

XYChart.Series의 인스턴스를 setOnMouseEntered에서 작동하도록 설정할 수 있습니까? 작동시키기위한 하나의 전제 조건은 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