【问题标题】:Is there any way to avoid the page change in JavaFX pagination control?有什么方法可以避免 JavaFX 分页控件中的页面更改?
【发布时间】:2017-02-02 13:00:35
【问题描述】:

我在 JavaFX 中做一个应用程序,它使用像向导一样的分页控件进行信息输入,所以我需要在更改到新页面之前进行一些验证,但是我找不到拦截页面更改的方法事件发生之前。

我尝试将ChangeListener 添加到currentPageIndexProperty,但尽管这会通知页面更改,但如果需要,无法阻止它。

有什么办法可以避免JavaFX分页控件的页面变化?

【问题讨论】:

  • 我从来没有尝试过这个,但是如果验证没有通过,你可以禁用分页吗(使用属性监听器来确定页面是否有效)?这将(应该)简单地阻止用户首先请求页面更改。
  • @James_D:这种方法的问题在于它还会禁用页面上的所有控件。此外,一些验证需要一些数据库查询,这些查询最好是不可自动化的。
  • 啊,好的。那将是“我从未尝试过”的部分......这是一个想法。
  • 您可以实现分页控制。这意味着您需要重新发明轮子,但您可以根据需要对其进行定制....如果您需要一些复杂的代码,我可以拥有它: )

标签: java javafx pagination


【解决方案1】:

感谢@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));

谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多