我是德国人。当我创建这样的菜单快捷方式时:
neu.setAccelerator(new KeyCodeCombination(KeyCode.N, KeyCombination.CONTROL_DOWN));
快捷方式是英语。
我该怎么办,以便菜单快捷方式以德语显示?
答案 0 :(得分:0)
a bug that was recently reported(在本地化版本中未显示修饰符)(并且看起来不适合固定优先级列表的顶部)。所以我们必须解决它。
基本思想是在常规处理将其设置为硬编码英文版本后替换加速器文本。下面的示例在onShown处理程序的自定义Menu类中执行此操作。在这里,它只是再次进行了硬编码,显然,生产代码将需要实现某种对正确的本地化版本的查找。
public class BugHackMenu extends Menu {
public BugHackMenu(String text) {
super(text);
setOnShown(e -> hackAcceleratorText());
}
private void hackAcceleratorText() {
getItems().stream().forEach(item -> {
if (!needsHack(item)) return;
Node menuRow = item.getStyleableNode();
if (menuRow != null) {
Node accText = menuRow.lookup(".accelerator-text");
if (accText instanceof Label) {
Label acc = (Label) accText;
acc.setText(getHackedText(item.getAccelerator()));
}
}
});
}
private String getHackedText(KeyCombination accelerator) {
return accelerator.getDisplayText().replace("Ctrl", "Strg");
}
private boolean needsHack(MenuItem item) {
KeyCombination acc = item.getAccelerator();
return acc != null && acc.getControl() == ModifierValue.DOWN;
}
}
答案 1 :(得分:-1)
有没有办法对删除密钥执行此操作!因此,除了使用“删除”作为快捷方式,我还可以使用“删除” PS:我正在使用JMenuItem和KeyStroke!
private JMenuItem delRef = null; del = new JMenuItem("delete"); del.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
它在Java和Unix中