You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX点击按钮时如何选中Accordion控件内的指定TitledPane

问题原因

Accordion 控件中所有 TitledPane 的展开状态为受控属性,统一由 Accordion 维护,直接调用单个 TitledPane 的 isExpanded() 方法会存在两个问题:

  • 展开/折叠动画未完成时,isExpanded() 会返回错误的状态值
  • 部分 JavaFX 版本中,单个 TitledPane 的 expanded 属性和 Accordion 维护的实际展开状态会出现不同步的情况

直接修复方案

直接调用 Accordion 自带的 getExpandedPane() 方法获取当前展开的 TitledPane,无需遍历所有子节点,天然避免状态同步问题,修改后代码如下:

public void removeFileClicked(){
    TitledPane expandedPane = peersAccordion.getExpandedPane();
    // 避免无选中 pane 时空指针报错
    if (expandedPane != null) {
        TextArea a = (TextArea) expandedPane.getChildrenUnmodifiable().get(0);
        removeFileFromShared(a.getText().split("\n")[0]);
        peersAccordion.getPanes().remove(expandedPane);
    }
}

替代实现方案

如果后续需要支持自定义选中逻辑,或者不想和展开状态绑定,可以选择以下两种方案:

  • 全局变量维护选中状态:新增一个 selectedTitledPane 成员变量,给每个生成的 TitledPane 绑定展开监听器,只要该 Pane 被展开就更新全局变量的值,删除时直接操作该变量对应的 Pane 即可,无需依赖 Accordion 的内置属性。
  • Pane 独立删除入口:在每个 TitledPane 的头部自定义控件,加入单独的删除按钮,按钮的点击逻辑直接绑定当前所属的 TitledPane 的删除操作,无需判断选中状态,用户操作更直观,也能避免误删其他文件。

内容的提问来源于stack exchange,提问作者Varian Wrynn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:09:03