2017-04-04 65 views
1

在TabPane没有标签我尝试了一些方法:检查是否有对JavaFX的接近

tabPane.getSelectionModel().selectedItemProperty().addListener((e, o, n) 
     if (tabPane.getTabs().isEmpty()) someButton.setDisable(false); 

,这在创建标签时:

tab.setOnCloseRequest(e -> 
       if (tabPane.getTabs().isEmpty()) someButton.setDisable(false); 

但都没有工作。第二种方法最初是错误的,因为它在实际关闭标签之前检查是否有标签。任何解决方案非常感谢

回答

2

在TabPane ObservableList<Tab>上创建isNotEmpty BooleanBinding

TabPane tp = new TabPane(new Tab("A"),new Tab("B")); 
final BooleanBinding empty = Bindings.isNotEmpty(tp.getTabs()); 
Button someButton = new Button(); 
someButton.disableProperty().bind(empty); 
2

我不知道,如果下面的是你想要的,但你可以检查,匹配选项卡列表中tabpane < = 1而不是空洞的大小。

tab.setOnCloseRequest(event -> { 
    TabPane tabPane = tab.getTabPane(); 
    if (tabPane.getTabs().size() <= 1) { 
     // don't allow the last tab to be closed. 
     event.consume(); 
     return; 
    } 
}); 

消费的关闭请求将防止关闭,但你可以做其他的工作,在这种情况下,以及或代替(如操纵你的按钮的禁用属性),如果你的愿望。

通常按钮禁用属性可以通过绑定很好地控制,所以如果这是您需要完成的所有事情,那么可能像MBec的解决方案可能是一个好主意。