简体   繁体   English

饼图的事件处理

[英]Event Handling for Pie Chart

I have created a javafx pie chart and want to do something when the user clicks on a slice of the pie. 我创建了一个Javafx饼图,并希望在用户单击饼图的一部分时执行某些操作。 I am following this tutorial: 我正在关注本教程:

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()) + "%");
         }
    });

I am getting these error warnings prior to compile: On the ".addEventHandler" 在编译之前,我收到以下错误警告:在“ .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>

On the "EventHandler" 在“ EventHandler”上

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

Does anyone have any insights into why I am getting these errors? 是否有人对我为什么会出现这些错误有任何见解?

The addEventHandler() method takes two parameters: one of type T , and one that has a super class T . addEventHandler()方法采用两个参数:一个为T类型,另一个为具有超类T You gave it an EventHandler and an Integer . 您给了它一个EventHandler和一个Integer Since Integer is not a super class of EventHandler , you get an exception. 由于Integer不是EventHandler的超类,因此会出现异常。

My guess is that you're accidentally using Java SE's MouseEvent instead of Java FX's MouseEvent . 我的猜测是您不小心使用了Java SE的MouseEvent而不是Java FX的MouseEvent

I made the following changes to fix the problem, th is is javafx specific. 我进行了以下更改以解决此问题,它是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) {
     }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM