java - 使用相应的按钮 Java 完全临时禁用一个键

标签 java swing key-bindings

我有一个程序,简而言之,它会在按下按钮时前进。在某些执行阶段,该按钮会暂时停用,以防止它在错误的时间点触发代码。我现在已经创建了一些键绑定(bind)作为按下按钮的快捷方式,但需要在上述相同时间禁用它们,否则它们会导致我的数组在我使用它之前就被破坏和删除。

我可以使用任何提示、方法或 Java 方法来 [非常] 轻松地但通过禁用保持?

最佳答案

使用 doClick() 让绑定(bind)键按下 JButton。然后当按钮需要停用时,在按钮上调用 setEnabled(false)

顺便说一句,我想你的按钮和键绑定(bind)可以共享相同的 Action ,但我不知道在 Action 上调用 setEnabled(false) 是否会阻止键运行 Action 的 Action 执行方法。测试时间...马上回来...


编辑:是的,您可以让 JButton 和绑定(bind)键共享启用/禁用的相同操作:

import java.awt.event.*;
import javax.swing.*;

public class TestBoundAbstractActions {
   public static void main(String[] args) {
      final MyAction myAction = new MyAction();
      final JButton actionButton = new JButton(myAction);

      JRadioButton enableRadioButton = new JRadioButton("Enabled", true);
      enableRadioButton.addItemListener(new ItemListener() {

         @Override
         public void itemStateChanged(ItemEvent e) {
            myAction.setEnabled(e.getStateChange() == ItemEvent.SELECTED);
         }
      });


      JPanel panel = new JPanel();

      int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
      String mKey = "m key";
      panel.getInputMap(condition).put(KeyStroke.getKeyStroke(KeyEvent.VK_M, 0), mKey);
      panel.getActionMap().put(mKey, myAction);

      panel.add(new JLabel("Press \"m\" to activate key-bound action"));          
      panel.add(actionButton);
      panel.add(enableRadioButton);

      JOptionPane.showMessageDialog(null, panel);
   }
}

class MyAction extends AbstractAction {
   public MyAction() {
      super("My Action");
      putValue(MNEMONIC_KEY, KeyEvent.VK_M);
   }

   @Override
   public void actionPerformed(ActionEvent arg0) {
      System.out.println("boo!");
   }
}

关于java - 使用相应的按钮 Java 完全临时禁用一个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18949783/

相关文章:

java - 检查 Android native 联系人上的联系人是否已更改以更新我的数据库(sqlite)

java - 无法从 WebFilter 发送 json 响应

Java KeyListener,尝试根据按下的键改变颜色

java - setComponentOrientation 对表单设计器没有影响

java - 我不确定为什么我的按键绑定(bind)不起作用。 [Java 按键绑定(bind)]

Javascript 捕获 ctrl+alt+c

java - 如何使用java将spark 2.2中的数组元素转换为Map[String,String]

java - 使许多 bean 依赖于一个 bean 的简单方法

java - 根据字体和字符串项调整 JComboBox 的宽度

emacs - 在邪恶中为正常模式重新绑定(bind)数字