IllegalArgumentException: несоответствие типа аргумента при попытке перетащить всплывающее окно - PullRequest
0 голосов
/ 06 июля 2019

Когда я пытаюсь перетащить всплывающее окно, появляется исключение:

java.lang.IllegalArgumentException: argument type mismatch

Я проектировал popwindow в SceneBuilder и добавлены два метода для anchorpane:

  1. setOnMousePressed -> возвращает позицию всплывающего окна
  2. setOnMouseDragged -> возвращает исключение.

Первый метод работает нормально, а второй нет. Поскольку я не могу найти решение, хотя тема уже рассмотрена, я был бы очень благодарен за некоторую помощь.

Код окна:

private static double xOffset = 0; 
private static double yOffset = 0;

@FXML
void setOnMouseDragged(MouseDragEvent event) {
    Stage window=(Stage)((Node) event.getSource()).getScene().getWindow();
    window.setX(event.getScreenX() + xOffset);
    window.setY(event.getScreenY() + yOffset);
}

@FXML
void setOnMousePressed(MouseEvent event) { 
    Stage window=(Stage)((Node) event.getSource()).getScene().getWindow();
    xOffset = window.getX() - event.getScreenX();
    yOffset = window.getY() - event.getScreenY();
    System.out.println("setOnMouseDraggedx:"+xOffset+" yOffset:"+yOffset);
//this method works and prints out x:-419.0 yOffset:-31.0
}

1 Ответ

0 голосов
/ 07 июля 2019

EventHandler свойства Node#onMouseDragged обрабатывает MouseEvent с, а не MouseDragEvent с.Первый не может быть приведен ко второму.

onMouseDragged

public final ObjectProperty<EventHandler<? super MouseEvent>> onMouseDraggedProperty

Определяет функцию, вызываемую при нажатии кнопки мыши на этом Node, а затем при перетаскивании.

Использование:

@FXML
void setOnMouseDragged(MouseEvent event) { /* code */ }

Следует решить IllegalArgumentException.


Обратите внимание, что setOnMouseDragged и setOnMousePressed являются нечетными именами для методов, которые не устанавливайте обработчики событий, но вместо этого фактически обрабатывайте их соответствующие события.

...