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>

有人对我为什么会收到这些错误有任何见解吗?

4

2 回答 2

2

addEventHandler()方法有两个参数:一个是 type T,另一个是 super class T。你给了它一个EventHandler和一个Integer。由于Integer不是 的超类EventHandler,因此您会遇到异常。

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

于 2013-07-17T20:36:55.860 回答
1

我进行了以下更改来解决问题,这是 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) {
     }
});
于 2013-07-17T20:40:55.643 回答