java - NetBeans 平台 : Action disabled, 但快捷方式处于 Activity 状态

标签 java keyboard-shortcuts action toolbar netbeans-platform

在我的应用程序上花了一个月的时间后,我发现了一些奇怪的东西。我有一个查看器模块,其中包含所有 TopComponent,还有一个 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 置于添加模式。我还有一个用 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 进行删除。这是一个很大的禁忌...

我该如何解决此问题?

最佳答案

您不应直接启用/禁用操作。看看the Actions APICookieAction 可能就是您想要的。这个想法是将 Cookie(某些上下文)发布到全局查找。您的 Cookie 感知操作会根据 Cookie 的存在情况自动启用/禁用。

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

您可以考虑使用state machine以干净的方式控制 cookie 的存在。

关于java - NetBeans 平台 : Action disabled, 但快捷方式处于 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10985448/

相关文章:

java - Mockito 在模拟方法的参数上调用方法

xcode - block 缩进 Xcode

visual-studio-code - 有没有办法查看按下某个键时运行的命令?

html - 表单操作参数不起作用

facebook - FB Open Graph : why when my app posts an action on user's wall, 与该操作相关的操作链接未显示在帖子上?

java - dom4j库是如何实现享元模式的?

java - Jboss 中的乱序消息

java - 无法使 GWT devmode 插件与 Firefox 一起使用

windows - 在 Windows 8 中创建新文件的 AutoHotKey 快捷方式

html - 将表单输入值传递给操作