Javafx手风琴集下一个扩展的窗格



在手风琴中,可以用accordion.setExpandedPane设置所选窗格,并且也可以使所有患有accordion.getPanes()的孩子。

但是,我正在努力寻找如何实现"选择Next Pane"功能,而无需显式扩展标题为PANES的标题类别,并通过accordion.expandedPaneProperty()手动维护索引和一些自定义实现。

建议的解决方案是添加收听expandedPaneProperty()

    accordion.expandedPaneProperty().addListener((observable, oldValue, newValue) -> {
        if(null != newValue){
            idx = 0;
            for(TitledPane whytho: this.getPanes()){
                if(!whytho.equals(newValue))idx++;
                else break;
            }
            selectedIndex = idx;
        }
    });

有一个简单的方法吗?

您可以使用List#indexOf(Object)查询当前展开的窗格的索引。然后,您只需要将扩展的窗格设置为index ± 1的窗格。

private void expandPrevious(Accordion acc) {
    int index = acc.getPanes().indexOf(acc.getExpandedPane());
    int newIndex = Math.max(index - 1, 0);
    acc.setExpandedPane(acc.getPanes().get(newIndex));
}
private void expandNext(Accordion acc) {
    int index = acc.getPanes().indexOf(acc.getExpandedPane());
    int newIndex = Math.min(index + 1, acc.getPanes().size() - 1);
    acc.setExpandedPane(acc.getPanes().get(newIndex));
}

上面没有围绕逻辑执行任何包裹;换句话说,在扩展最后一个窗格时致电expandNext不会扩展第一个窗格,而没有什么可以改变的。它也无法处理getExpandedPane()返回null的情况。

相关内容

最新更新