Java 在秋千中找不到jtoolbar的快捷键?
我没有任何关于代码的线索,任何帮助都将不胜感激 我正在上传一张需求图片,您可以看到,对于特定的工具栏,我想实现所有可用的快捷键,但我不知道从哪里开始,首先想到:“这很简单,RTFT”,吐出第一个代码片段:Java 在秋千中找不到jtoolbar的快捷键?,java,swing,Java,Swing,我没有任何关于代码的线索,任何帮助都将不胜感激 我正在上传一张需求图片,您可以看到,对于特定的工具栏,我想实现所有可用的快捷键,但我不知道从哪里开始,首先想到:“这很简单,RTFT”,吐出第一个代码片段: Action action = new AbstractAction("clear text") { @Override public void actionPerformed(ActionEvent e) { System.o
Action action = new AbstractAction("clear text") {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("triggered the action");
}
};
action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F1"));
JToolBar bar = new JToolBar();
bar.add(action);
// set toolbar to frame and be happy
猜猜按F1会发生什么。。。对,没什么
事实证明,工具栏中的按钮与菜单中的按钮不同,默认情况下不支持快捷键。这对我(其他人?)来说是出乎意料的,可能有几个原因
- 这是摇摆队的疏忽
- 本机应用程序也不支持它们
menu.add(action);
如果它真的是一个独立的工具栏,而不是由菜单支持,则需要做更多的工作,基本上就是显式地将键绑定添加到添加到工具栏的按钮上,类似于:
JToolBar bar = new JToolBar();
JButton toolBarButton = bar.add(action);
toolBarButton.getActionMap().put("myAction", action);
toolBarButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
(KeyStroke) action.getValue(Action.ACCELERATOR_KEY), "myAction");
如果这是许多按钮给定上下文的标准要求,则子类JToolBar将覆盖add(Action)方法,并在调用super后在那里执行该操作:
public class JXToolBar extends JToolBar {
public JButton add(Action action) {
JButton button = super.add(action);
KeyStroke stroke = (KeyStroke) action.getValue(Action.ACCELERATOR_KEY);
if (stroke != null) {
// do the input/actionMap config here
}
}
}
我投票决定结束这个问题。。。投票结束了这个问题,但是。。。这并不像我预期的那么简单-似乎无法撤销关闭,嗯。你承诺的图像在哪里?投票表决试图防止完全崩溃:-)我很想听到更多关于要求+1的细节,没有在按钮上显示加速器的视觉方式(不像JMenuItem),因此,我想不把它作为支持行为是有道理的。还同意该操作应与JMenuItem共享以获得此默认行为。@camickr很好-显示加速器的唯一方法是(手动配置)工具提示。这需要将鼠标移到它上面才能看到,因此它不是真正的视觉线索-但屏幕阅读器可能需要它。请记住AbstractButton提供了一个
configurePropertiesFromAction
方法,该方法最好覆盖以设置绑定(和工具提示?)。JMenuItem当前覆盖此方法以设置加速器。@kleopatra谢谢,它工作正常