Запрет пробел от вызова кнопки панели инструментов по умолчанию - PullRequest
0 голосов
/ 04 декабря 2018

Вот простой пример, где 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");     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...