防止空格键调用默认的工具栏按钮

时间:2018-12-04 15:13:13

标签: java jmenu keymapping abstract-action

这是一个简单的示例,其中在工具栏按钮上使用了AbstractAction。

运行该应用程序并按下空格键时,它将打印“ Inside Toolbar Action”。

目标是防止空格键调用按钮。

import java.awt.*;
import java.awt.event.ActionEvent;

import javax.swing.*;

public class ToolBarSample 
{
  public static void main(final String args[]) 
  {
    AbstractAction action1 = new AbstractAction()
        {

        @Override
        public void actionPerformed(ActionEvent e) 
        {
            System.out.println("Inside Toolbar Action");

        }

        };
    action1.putValue(Action.NAME, "Button 1");
    JFrame frame = new JFrame("JToolBar Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JToolBar toolbar = new JToolBar();
    toolbar.setRollover(true);

    toolbar.add(action1);
    toolbar.addSeparator();
    toolbar.add(new JButton("button 2"));

    Container contentPane = frame.getContentPane();
    contentPane.add(toolbar, BorderLayout.NORTH);
    JTextArea textArea = new JTextArea();
    JScrollPane pane = new JScrollPane(textArea);
    contentPane.add(pane, BorderLayout.CENTER);
    frame.setSize(350, 150);
    frame.setVisible(true);
  }
}

最好在actionPerformed()调用“ if(e.getKeyCode()== KeyEvent.VK_SPACE)))中使用以下内容,但无法从ActionEvent中获取KeyEvent。

已找到该参考文献How to stop spacebar from triggering click effect on a button?,但确实提到了有关键绑定及其在不同平台上的行为的问题,我想避免这种情况。

已编辑以添加...。 我确实尝试了以下可行的方法,但这改变了应用程序内所有JFrame的行为,我只想要一个特定的JFrame。

InputMap im = (InputMap)UIManager.get("Button.focusInputMap");
im.put(KeyStroke.getKeyStroke("pressed SPACE"), "none");
im.put(KeyStroke.getKeyStroke("released SPACE"), "none");     

0 个答案:

没有答案