2013-07-17 3 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> 

На "EventHandler"

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

Does кто-нибудь знает, почему я получаю эти ошибки?

ответ

2

Метод addEventHandler() принимает два параметра: один из типов T, и тот, который имеет класс супер T. Вы дали ему EventHandler и Integer. Поскольку Integer не является супер-классом EventHandler, вы получаете исключение.

Я предполагаю, что вы случайно используете Java SE's MouseEvent вместо Java FX's MouseEvent.

+0

Да, затмение мне столько же. Спасибо, что задумались. – 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) { 
    } 
});