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

如何为FXtras Agenda单个约会设置allowDragging属性而非全局设置

实现JFXtras Agenda单个约会的拖拽权限控制

我之前刚好碰到过和你一模一样的需求,用的也是JFXtras 8.0-r5的Agenda组件,给你分享个亲测可行的方案:

因为Agenda的allowDragging是全局开关,要实现单个约会的拖拽控制,我们可以先开启全局拖拽,再通过事件拦截来限制特定分组的约会,具体步骤如下:

  1. 首先开启全局拖拽功能
    把Agenda的allowDragging设为true,这样所有约会默认具备拖拽的基础能力,之后我们再针对特定分组做限制。

  2. 拦截拖拽启动事件
    给Agenda添加DRAG_DETECTED事件监听器,这个事件是拖拽开始前的检测阶段,我们在这里判断当前选中的约会属于哪个分组:

    • 如果是group2(shared约会),就消耗掉事件,阻止拖拽启动;
    • 如果是group1(personal约会),就执行默认的拖拽初始化逻辑。

下面是完整的代码示例:

Agenda agenda = new Agenda();
// 开启全局拖拽
agenda.setAllowDragging(true);

// 添加拖拽检测事件监听器
agenda.addEventHandler(DragEvent.DRAG_DETECTED, event -> {
    // 获取当前选中的约会(Agenda在拖拽前会选中要拖拽的约会)
    Optional<Agenda.Appointment> selectedAppt = agenda.appointments()
            .filtered(Agenda.Appointment::isSelected)
            .stream()
            .findFirst();

    if (selectedAppt.isPresent()) {
        Agenda.Appointment appt = selectedAppt.get();
        // 判断约会所属分组,阻止group2的约会拖拽
        if ("group2".equals(appt.getGroup())) {
            event.consume();
        } else {
            // 允许group1的约会进行拖拽,触发默认拖拽逻辑
            agenda.startFullDrag();
        }
    }
});

原理说明

这个方案的核心是利用事件传播机制:先让全局拖拽功能生效,然后在拖拽行为的起始阶段就拦截掉不允许的操作。这样group1的约会可以正常拖拽调整时间,group2的约会用户根本没法触发拖拽操作,完美符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:49:31