2013-07-17 41 views
0

我已经创建了一个javafx饼图,并且想要在用户点击一个饼图片时执行某些操作。我下面这个教程:饼图的事件处理

for (final PieChart.Data data : chart.getData()) { 
data.getNode().addEventHandler(MouseEvent.MOUSE_PRESSED, 
    new EventHandler<MouseEvent>() { 
     @Override public void handle(MouseEvent e) { 
      caption.setTranslateX(e.getSceneX()); 
      caption.setTranslateY(e.getSceneY()); 
      caption.setText(String.valueOf(data.getPieValue()) + "%"); 
     } 
    }); 

我正在编译之前这些错误警告: 在 “.addEventHandler”

Bound mismatch: The generic method addEventHandler(EventType<T>, EventHandler<? 
superT>) of type Node is not applicable for the arguments (Integer, new 
EventHandler<MouseEvent> (){}). The inferred type MouseEvent&Event is not a valid 
substitute for the bounded parameter <T extends Event> 

在 “事件处理程序”

Bound mismatch: The type MouseEvent is not a valid substitute for the bounded parameter 
<T extends Event> of the type EventHandler<T> 

不任何人有任何见解,为什么我得到这些错误?

回答

2

addEventHandler()方法采用两个参数:T类型之一,和一个超类T。你给它一个EventHandler和一个Integer。由于Integer不是EventHandler的超级类别,因此会发生异常。

我的猜测是你不小心使用了Java SE's MouseEvent而不是Java FX's MouseEvent

+0

是的,eclipse跟我说的一样多。不过谢谢您的详细介绍。 – PandaBearSoup

+0

您对使用错误的MouseEvent进行编辑是正确的。 – PandaBearSoup

1

我做了以下更改以解决问题,th是javafx特定的。

for (final PieChart.Data data : chart.getData()) { 
data.getNode().addEventHandler(javafx.scene.input.MouseEvent.MOUSE_PRESSED, 
new EventHandler<javafx.scene.input.MouseEvent>() { 
    @Override public void handle(javafx.scene.input.MouseEvent e) { 
    } 
});