Запрет пробел от вызова кнопки панели инструментов по умолчанию

Вот простой пример, где AbstractAction используется для кнопки панели инструментов.

Когда приложение запускается и нажимается пробел, оно печатает "Действие внутри панели инструментов".

Цель состояла бы в том, чтобы препятствовать тому, чтобы пробел вызвал кнопку.

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)))", но не удалось получить KeyEvent из ActionEvent.

Эта ссылка была найдена Как остановить пробел от запуска эффекта нажатия на кнопку? но в нем упоминаются проблемы с привязками клавиш и их поведением на разных платформах, чего я бы хотел избежать.

Отредактировано, чтобы добавить.... Я попробовал следующее, которое сработало, но это меняет поведение для всех JFrames в приложении, и я просто хочу один конкретный.

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

0 ответов

Другие вопросы по тегам