NetBeans 平台:操作已禁用,但快捷方式处于活动状态



在我的应用程序上投入了一个月的工作后,我发现了一些奇特的东西。我有一个查看器模块,其中所有顶级组件都在,还有一个菜单工具栏模块,我保存所有工具栏操作。这是我的补充:

package com.demo.toolbar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.openide.awt.ActionRegistration;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionReferences;
import org.openide.awt.ActionID;
import org.openide.util.NbBundle.Messages;
@ActionID(category = "Edit",
id = "com.demo.toolbar.AddAction")
@ActionRegistration(iconBase = "com/demo/toolbar/icons/add.png",
displayName = "#CTL_AddAction")
@ActionReferences({
    @ActionReference(path = "Toolbars/AddEditDelete", position = 1),
    @ActionReference(path = "Shortcuts", name = "D-A")
})
@Messages("CTL_AddAction=Add")
public final class AddAction implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        //code here
    }
}

该快捷方式通过CTRL + A激活,它将TopComponent置于添加模式。 我还有一个使用CTRL + D命令激活的删除操作。当此人按 Ctrl+A 时,将发生以下情况:

List<Component> c = new ArrayList<Component>();
        c.addAll(Arrays.asList(ToolbarPool.getDefault().findToolbar("AddEditDelete").getComponents()));
if (mode.equals("add")) {
    for (Component component : c) {
        component.setEnabled(false);
        }
        c.get(13).setEnabled(true);
        c.get(14).setEnabled(true);
}
因此,

基本上每当用户点击工具栏上的"添加"按钮时,它都会禁用所有其他按钮(包括删除),因此用户在"添加"模式下无法执行这些操作。

但是,他们仍然可以按 Ctrl+D 进行删除。这是一个很大的禁忌...

如何修复此行为?

不应直接启用/禁用操作。查看操作 API。 CookieAction可能是你想要的。这个想法是将 Cookie(某些上下文)发布到全局查找中。您的 Cookie 感知操作会自动启用/禁用,具体取决于 Cookie 的存在。

实际上,这就是 IDE 中的保存按钮的工作方式。每当编辑器将SaveCookie到全局上下文时,都会启用工具栏按钮和 Ctrl+S;如此处所述

您可以考虑使用状态机以干净的方式控制 Cookie 的存在。

相关内容

最新更新