|
|
1
1
@Override public void setAccelerator( KeyStroke keyStroke ) {
super.setAccelerator( keyStroke );
getInputMap( WHEN_IN_FOCUSED_WINDOW ).put( keyStroke, "none" );
}
瞧!非功能快捷键,菜单项上的提示文本保持不变。 然而,对于我原来的问题,一个更好的解决方案是更改所有快捷键的行为,以便它们 当键盘焦点位于文本组件内时,请勿激发。 相反,我只需在swing中使用常规快捷键体系结构(即,将其安装在JMenuBar或Action对象中),只需进行一次小的修改: 此部件再次位于JMenuItem的自定义子类中: /** {@inheritDoc} */
@Override public void setAccelerator( KeyStroke keyStroke ) {
super.setAccelerator( keyStroke );
if ( doClickAction_ == null ) {
doClickAction_ = new DoClickAction( getActionMap().get( "doClick" ) );
getActionMap().put("doClick", doClickAction_);
}
}
/**
* This action wraps the original "doClick" action for this menu item,
* altering it so that it only fires if the keyboard focus is not in any
* kind of text area or text field.
*
|
|
|
2
0
考虑到您不接触L&F代码,这是加速器文本的布局。。。
查看
|
|
|
3
0
|
|
|
4
0
设置加速器是否会影响您当前实现这一切的方式?如果没有,您可以将加速器设置为空格键。。。我会继续假设你不能那样做。您可以做的另一件事是覆盖JMenuItem上的getAccelerator(),这样您就不必从JMenuItem复制大部分代码(这里没有太多)。
|