Как получить разрешение экрана приложения (при изменении размера), но только после того, как мышь была выпущена?JavaFX: ChangeListener, чтобы получить разрешение экрана на мыши.
Я осмотрелся, но ничего не нашел. Я сделал это:
scene.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
ConfigBusiness.getInstance().setScreenWidth(newValue.intValue());
}
});
scene.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
ConfigBusiness.getInstance().setScreenHeight(newValue.intValue());
}
});
Но, как вы ожидаете, каждый раз изменения ширины/высоты, она вызывает функцию для сохранения значения (в моем случае, в реестре, что приводит к многократным вызовам).
Есть ли способ получить значение только при отпускании кнопки мыши? Или, может быть, использовать другого слушателя (setOnMouseDragRelease
или что-то в этом роде)?
EDIT: Я хочу, чтобы пользователь мог изменять размер окна приложения, и как только он освобождает кнопку мыши после изменения размера, я хотел бы вызвать событие (а не в течение всего процесса изменения размера).
Благодаря
EDIT 2: После чуток идею @Tomas Bisciak, я пришел с этой идеей.
scene.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
if(!widthHasChanged()){
setWidthChanged(true);
System.out.println("Width changed");
}
}
});
scene.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
if(!heightHasChanged()){
setHeightChanged(true);
System.out.println("Height changed");
}
}
});
scene.addEventFilter(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if(widthHasChanged()){
ConfigBusiness.getInstance().setScreenWidth(scene.getWidth());
System.out.println("Width changed > release");
setWidthChanged(false);
}
if(heightHasChanged()){
ConfigBusiness.getInstance().setScreenHeight(scene.getHeight());
System.out.println("Height changed > release");
setHeightChanged(false);
}
}
});
Я помечено изменения сделанных во время изменения размера процесса (с помощью widthProperty
и heightProperty
) и установить их верно, если будет изменен, и при отпускании мышей, я установить значение, если они изменились.
Проблема в том, что последнее событие MOUSE_RELEASED
не запускается. Я вижу выход с changeListener
с, но не eventFilter
. Есть идеи ?
Вы хотите разрешение экрана монитора или из окна приложения? Потому что я вижу, что вы получаете ширину и высоту окна приложения. – GOXR3PLUS
Из окна приложения. Фактически, я просто хочу, чтобы пользователь мог изменить размер окна приложения так, как он хочет, и сохранить эту информацию для дальнейшего использования. – Jacks