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

Java NetBeans平台:操作已禁用,但快捷方式处于活动状态,java,keyboard-shortcuts,action,toolbar,netbeans-platform,Java,Keyboard Shortcuts,Action,Toolbar,Netbeans Platform,我在申请上花了一个月的时间后,发现了一些奇怪的东西。我有一个查看器模块,其中包含所有TopComponents,还有一个MenuToolbar模块,用于保存所有工具栏操作。这是我的补充: package com.demo.toolbar; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import org.openide.awt.ActionRegistration; import org.op

我在申请上花了一个月的时间后,发现了一些奇怪的东西。我有一个查看器模块,其中包含所有TopComponents,还有一个MenuToolbar模块,用于保存所有工具栏操作。这是我的补充:

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置于添加模式。我还有一个DeleteAction,它是用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);
}
listc=newarraylist();
c、 addAll(Arrays.asList(ToolbarPool.getDefault().findToolbar(“AddEditDelete”).getComponents());
如果(模式等于(“添加”)){
用于(组件:c){
组件.setEnabled(false);
}
c、 get(13).setEnabled(true);
c、 get(14).setEnabled(true);
}
因此,基本上每当用户点击工具栏上的“添加”按钮时,它都会禁用所有其他按钮(包括“删除”),因此用户在“添加”模式下无法执行这些操作

但是,它们仍然可以按CTRL+D键删除。这是一个大禁忌


我如何着手修复此行为?

您不应直接启用/禁用操作。看一看<代码>CookieAction可能是您想要的。其思想是将Cookie(某些上下文)发布到全局查找。您的Cookie感知操作将根据Cookie的存在自动启用/禁用

事实上,IDE中的save按钮就是这样工作的。每当编辑器将
SaveCookie
放入全局上下文时,工具栏按钮和Ctrl+S都会启用;如上所述


你可以考虑用一个干净的方式来控制Cookie的存在。

我试过了,大约一个星期后,我仍然无法想出一个远程工作的原型。我的目标是创建Action1、Action2和Action3(所有自定义操作,使用NB向导创建),其中单击Action1将禁用Action1和Action2,单击Action3将启用1和2,但禁用3。如果你有一个链接到一个教程,它以一种比API更彻底的方式展示了CookieAction的实现,我将不胜感激。我确实同意,使用某种globalcontext比直接控制操作要好。