在JavaFX分页控制中是否有办法避免页面更改?



我正在JavaFX中编写一个应用程序,该应用程序使用分页控件(如向导)进行信息输入,因此我需要在更改新页面之前进行一些验证,但是我找不到在页面更改事件发生之前拦截它的方法。

我试图将ChangeListener添加到currentPageIndexProperty,但是尽管这会通知页面更改,但如果需要的话,没有办法阻止它。

是否有任何方法可以避免JavaFX分页控制中的页面更改?

我终于找到了答案,感谢@GoXR3Plus的想法,实现了我自己的PaginationSkin:

import com.sun.javafx.scene.control.skin.PaginationSkin;
import javafx.event.EventHandler;
import javafx.scene.control.Pagination;
import javafx.scene.input.KeyEvent;
class ProtocolPaginationSkin extends PaginationSkin implements EventHandler<KeyEvent> {
    public ProtocolPaginationSkin(Pagination pagination) {
        super(pagination);
        pagination.setOnKeyPressed(this);
    }
    @Override
    public void selectNext() {
        if (getSkinnable().getCurrentPageIndex() < getSkinnable().getPageCount() - 1) {
            validateAndSave(getSkinnable().getCurrentPageIndex() + 1);
        }
    }
    @Override
    public void selectPrevious() {
        if (getSkinnable().getCurrentPageIndex() > 0) {
            validateAndSave(getSkinnable().getCurrentPageIndex() - 1);
        }
    }
    @Override
    public void handle(KeyEvent event) {
        if (event.getCode().isDigitKey()) {
            int index = Integer.parseInt(event.getText()) - 1;
            if (index >= 0 && index < getSkinnable().getPageCount()) {
                validateAndSave(index);
            }
        }
    }
    private void validateAndSave(int index) {
        if (isPageValid() && save()){
            getSkinnable().setCurrentPageIndex(index);
        }
    }
}

其中isPageValid()save()是业务的私有布尔方法。然后,你只需要做:

pagination.setSkin(new ProtocolPaginationSkin(pagination));

谢谢。

最新更新