Существует разница между focus
и released
, фокусировка происходит при нажатии на узел, и он не фокусируется, пока вы не сфокусируетесь на новом узле.чтобы получить выпущенное событие мыши, вам нужно:
onMouseReleasedProperty
время, которое «занимает» его, пока вы не нажмете на новый узел и не передадите фокус на него (или не закроетезапрограммировать или нажать на другие вещи ...)
Я использую TextField для лучшего понимания:
VBox vb = new VBox();
for(int i =0; i<10;i++){
TextField hb = new TextField("Number"+i);
vb.getChildren().add(hb);
hb.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
hb.requestFocus();
}
});
hb.focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
System.out.println(newValue ? vb.getChildren().indexOf(hb) + "Focused" : vb.getChildren().indexOf(hb) + " Unfocused");
}
});
}
теперь вы можете увидеть:
4 с фокусировкой, и фокус останется, пока вы не нажмете на другие вещи (фокус не был отпущен)