这是一个简单的示例,其中在工具栏按钮上使用了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");