簡體   English   中英

JavaFX手風琴將進一步擴展面板

[英]JavaFX Accordion set next expanded Pane

在Accordion中,可以通過accordion.setExpandedPane .setExpandedPane設置選定的Pane,還可以通過accordion.getPanes()獲取所有子級。

但是,我正在努力尋找如何實現“選擇下一個窗格”功能而又不顯式擴展窗格的TitledPane類,以及如何通過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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM