我正在使用JavaFX8处理PDF查看器并具有“向上翻页”和“向下翻页”按钮。如果当前显示的页面是第一页,我希望禁用“向上翻页”按钮。
首先,我已经向我的控制器添加了一个isFirstPage BooleanProperty
实例变量(我根据当前页码设置为true或false),这样可以正常工作,但添加实例变量似乎有点过头了。应用程序的每个状态(isFirstPage,isLastPage,isDocumentLoaded等)。
我想要实现的是将disableProperty绑定到Predicate(每次selectedPageNo更改时都会对其进行评估),但显然我做错了,因为代码不起作用(按钮永远不会被禁用):< / p>
nextPageButton.disableProperty().bind(Bindings.createBooleanBinding(() ->
selectedPageNo.intValue() >= currentDocument.getNumberOfPages()));
此处selectedPageNo
是IntegerProperty
和currentDocument
和org.apache.pdfbox.pdmodel.PDDocument
答案 0 :(得分:1)
三种不同的方式:
IntegerProperty
API
你可以做到
nextPageButton.disableProperty().bind(
selectedPageNo.greaterThanOrEqualTo(currentDocument.getNumberOfPages()));
如果页数可能会更改并且也由IntegerProperty
表示,则
nextPageButton.disableProperty().bind(
selectedPageNo.greaterThanOrEqualTo(currentDocument.numberOfPagesProperty()));
将观察这两个属性并根据需要进行更新。
Bindings API
对于IntegerProperty
继承自NumberExpressionBase
的方法不支持的更一般的计算,您几乎可以像使用它一样使用Bindings
API。你省略的是提供绑定需要观察的属性:
nextPageButton.disableProperty().bind(Bindings.createBooleanBinding(() ->
selectedPageNo.intValue() >= currentDocument.getNumberOfPages(),
selectedPageNo));
子类BooleanBinding
另一种方法是直接子类BooleanBinding
:
nextPageButton.disableProperty().bind(new BooleanBinding() {
{
bind(selectedPageNo);
}
@Override
protected boolean computeValue() {
return selectedPageNo.intValue() >= currentDocument.getNumberOfPages();
}
});