JMenuItem快捷键对齐

3
我有一个带有标准项和快捷键的JMenuBar。但我注意到快捷键描述是左对齐的,看起来很丑。是否有办法将其右对齐?
PS:“Umschalt”表示Shift。有没有办法强制它说Shift而不是Umschalt?
[更新:Locale.setDefault(Locale.ENGLISH);解决了问题,但只影响特定组件的解决方案会更好...]
PSPS:使用UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())将外观设置为操作系统默认值。但现在我想在标准操作系统外观之上进行一些小的外观调整。例如,我想将JMenuBar设置为黑色。网络告诉我使用UIManager.put(“tMenuBar.background”,Color.BLACK);但似乎没有任何作用。
[更新:看起来在Windows外观和感觉下不可能:/]
这里是代码:
    private JMenuBar tMenuBar;
    private JMenu mbEdit;
    private JMenuItem mCut, mCopy, mPaste, mDo, mUndo;

    tMenuBar = new JMenuBar();
    mbEdit = new JMenu("Edit");
    tMenuBar.add(mbEdit);

    // EDIT
    mUndo = new JMenuItem("Undo");
    mDo = new JMenuItem("Redo");
    mCut = new JMenuItem("Cut");
    mCut.setIcon(iCut);
    mCopy = new JMenuItem("Copy");
    mCopy.setIcon(iCopy);
    mPaste = new JMenuItem("Paste");
    mPaste.setIcon(iPaste);
    mbEdit.add(mUndo);
    mbEdit.add(mDo);
    mbEdit.addSeparator();
    mbEdit.add(mCut);
    mbEdit.add(mCopy);
    mbEdit.add(mPaste);

    // Undo
    mUndo.setAccelerator(KeyStroke.getKeyStroke(
            java.awt.event.KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
    // Redo
    mDo.setAccelerator(KeyStroke.getKeyStroke(
            java.awt.event.KeyEvent.VK_Z, ((Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | java.awt.event.InputEvent.SHIFT_MASK))));
    // Cut
    mCut.setAccelerator(KeyStroke.getKeyStroke(
            java.awt.event.KeyEvent.VK_X, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
    // Copy
    mCopy.setAccelerator(KeyStroke.getKeyStroke(
            java.awt.event.KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
    // Paste
    mPaste.setAccelerator(KeyStroke.getKeyStroke(
            java.awt.event.KeyEvent.VK_V, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));

已经尝试过的解决方案:

applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

enter image description here


但关于对齐方式的主要问题仍然存在...)这是JMenuItem的用户界面的一部分。因此,您可能需要自己更改UI布局。 - camickr
是的..我已经开始查看JMenuItem的文档了..但是我找不到"布局(Layout)"的位置...但是为什么有人会实现左对齐的快捷方式显示呢? - Haeri
2个回答

1
我希望将JMenuBar变为黑色。
应该是这样的(带有“t”)。
UIManager.put("MenuBar.background", Color.BLACK);

在创建组件之前,您需要设置UIManager属性。

另外,这个属性可能不支持所有的LAF。请查看UIManager Defaults获取更多信息和支持LAF的属性列表。


好的。我以为我必须使用我已经创建的对象。但还是没有运气。我已经下载了那个工具,是的,Windows LAF支持MenuBar.background。在创建组件之前放置它似乎无法解决问题。 UIManager.put("MenuBar.background", Color.BLACK); JMenuBar tMenuBar = new JMenuBar(); - Haeri
有趣的事实:如果我删除设置Look&Feel的部分,UIManager.put方法实际上会起作用...(这很奇怪,因为UIManagerDefaults应用程序说“Windows L&F”应该有一个ManuBar.background方法.... - Haeri
@Haeri,是的,可能会存在不一致性。UIManager 可能有信息,但 LAF 可能会忽略它。 - camickr
好的,谢谢。不管怎样,这是一个PSPS问题 xD。 - Haeri

1

请查看这个post,其中涉及德语单词。我知道这可能只是一条评论而不是答案,但由于声誉不足,我仍然无法进行评论,但我想提供帮助。


哦,谢谢!那很有帮助。但它将整个应用程序都改为了英文,而不是系统默认语言...能够只更改特定部分会更好...但这也很好。 (很想将您的答案标记为最终答案,但主要问题关于对齐仍然存在...) - Haeri
我很高兴它有所帮助,关于整个应用程序的更改,您可以尝试仅在GUI对象上使用setLocale()方法,但我不确定这是否有效。 - Iootu
关于对齐方式,这个链接是否有帮助?(https://dev59.com/uWrWa4cB1Zd3GeqP8jyU) - Iootu
呵呵。在我发问题之前,我确实做了一些研究。是的,我已经尝试过那个方法了。它只影响了项目的标签,而不是快捷方式。 它看起来像这样: [....打开 Ctrl+O] 而不是: [打开.... Ctrl+O] 但是对你的努力给个赞+1 ;) - Haeri
@Haeri 哈哈,信不信由你,我在发布之前没有意识到快捷方式和描述已经交换了位置。 - Iootu
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接