当前位置: 首页 > 知识库问答 >
问题:

Java Swing:当按住Alt键时,如何更改按钮的文本?

黎浩然
2023-03-14

我正在开发一个Swing gui。我有一个“Save”(保存)按钮,我希望它删除一个条目,而不是在按住Alt键时单击该条目。检查单击按钮时是否按住alt键没有问题。这不是这个问题的主题。

当按下Alt时,我希望“Save”(保存)按钮的文本更改为“Delete”(删除),当松开Alt时,返回到“Save”(保存)。

我曾尝试向我的JPanel添加一个KeyListener,但它似乎没有激活,可能是因为面板本身没有焦点,因为焦点在它的一个子面板上。

我尝试了通过JComponent InputMap和ActionMap进行键绑定,但我想不出只对应于Alt键的击键。我最不成功的猜测是:

myPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("alt"), "altKey");
myPanel.getActionMap().put("altKey", new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent event) {
        log.info("alt has been pressed.");
        saveButton.setText(event.getModifiers() == KeyEvent.VK_ALT ? "Delete" : "Save");
    }
});

无论焦点在窗口中的什么位置,当按下/释放Alt键时,我如何让代码执行?

共有1个答案

史阳晖
2023-03-14

要处理键事件,无论当前哪个元素具有焦点,请使用连接到当前KeyboardFocus usManager的KeyEventDispatcher,例如:

KeyboardFocusManager.getCurrentKeyboardFocusManager()
    .addKeyEventDispatcher((KeyEvent event) -> {
        if (event.isAltDown()) {
            saveButton.setText("Delete");
        } else {
            saveButton.setText("Save");
        }
        return false; // `false` allows further handling by other code
    });

感谢@AliasCartellano

注意:在按下Alt键和事件触发之间似乎有一个不可预测的小延迟。可能是因为它是一个修改键?我不清楚是否可以消除这种延迟。

 类似资料:
  • 我试图找出如何改变文本视图文本上的长按。我已经包括一个屏幕截图,希望解释我正在努力做什么。 手机应用图片 绿色10.00的价格表。我想能够按住每个价格,并弹出键盘来编辑文本字段。我是编程新手,发现很难搜索合适的术语。 到目前为止,我尝试的代码是: 有912个价格,我将它们分组以引用每个价格的ID。而不是试图对个别价格应用任何代码。我知道的用法不正确。我这样说是为了帮助我理解我想做什么,即使那不起作

  • } 完整错误消息:

  • 当我单击一个按钮时,有没有一种方法可以更改TreeView的TreeItem的文本?我尝试执行oracle示例http://docs.oracle.com/javafx/2/uicontrols/tree-view.htm中所示的操作,但我不想通过单击TreeItem更改它,而是单击按钮。第二步,我想使用上下文菜单打开一个带有Textfield的窗口,在这里我可以手动插入文本以更改treeitem

  • 问题内容: 当我单击按钮时,我希望值更改为从。 HTML: Javascript: 该按钮现在正在显示打开的窗帘,我希望将其更改为关闭窗帘,对吗? 问题答案: 如果我已正确理解您的问题,则希望在“打开窗帘”和“关闭窗帘”之间切换-如果关闭,则切换为“打开窗帘”,反之亦然。如果那是您需要的,那么它将起作用。 请注意,您不需要使用内部更改,因为它是在 上下文 中调用的-我所说的 上下文 是指您稍后会在

  • 问题内容: 目前,每次按键时,精灵仅移动1个像素。按住左右键时,如何使水暖工精灵不断移动? 问题答案: 您可以使用pygame.key.get_pressed来做到这一点。 例:

  • 这是每个具有相同大小文本时的布局: 下面是我增加右下角文本大小时的布局: 这是怎么回事?为什么“0”的移动低于相邻的两个Button? 这是布局: 我制作了“DONE”(完成)按钮的文本,超大型--100sp,并将其设置为其他按钮的高度和宽度。结果如下: 如果的大小从未改变,为什么更改“完成”按钮文本的大小会影响除特定>之外的任何其他内容?