饼图的事件处理

时间:2013-07-17 20:33:56

标签: java swing javafx

我创建了一个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>

在“EventHandler”

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

有没有人对我收到这些错误的原因有任何见解?

2 个答案:

答案 0 :(得分:2)

addEventHandler()方法有两个参数:一个是类型T,另一个是超类T。您为其指定了EventHandlerInteger。由于Integer不是EventHandler的超类,因此会出现例外情况。

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

答案 1 :(得分: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) {
     }
});