【问题标题】:JMenuItem shortcut alignmentJMenuItem 快捷方式对齐
【发布时间】:2014-10-26 00:45:04
【问题描述】:

我有一个带有标准项目和快捷方式的 JMenuBar。但是我注意到快捷方式描述是左对齐的,看起来很难看。有没有办法右对齐?

PS:“Umschalt”的意思是转变。有没有办法强制它说 shift 而不是 Umschalt?

[更新:Locale.setDefault(Locale.ENGLISH); 解决了这个问题,但只影响特定组件的解决方案会更好.. ]

PSPS:对于UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());,我已将外观设置为操作系统默认值。但现在我想在标准 OS Look 之上对外观做一些小的调整。例如,我想让 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);

【问题讨论】:

  • but the main question about the alignment still remains..) 这是 JMenuItem 的 UI 的一部分。因此,您可能需要自己更改 UI 布局。
  • 是的.. 我已经开始查看 JMenuItem 的文档了.. 但是我在任何地方都找不到“布局”...但是为什么有人会实现左对齐的快捷方式显示呢?

标签: java swing keystroke jmenubar


【解决方案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();
  • 有趣的事实:如果我删除设置 Look&Feel 的部分,UIManager.put 方法实际上可以工作...(这很奇怪,因为 UIManagerDefaults 应用程序说“Windows L&F”应该有一个 ManuBar .background 方法....
  • @Haeri,是的,可能存在不一致。 UIManager 可能有这些信息,但 LAF 可以忽略它。
  • 好的。谢谢你。好吧,这无论如何都是一个 PSPS 问题 xD。
【解决方案2】:

看看这个post关于德语单词。我确实意识到这可能是评论而不是答案,但由于缺乏声誉,我仍然无法做到这一点,我想提供帮助。

【讨论】:

  • 哦,谢谢!这有帮助。但是它将整个应用程序更改为英文而不是系统默认值...能够仅更改特定部分会很酷...但这也很棒。 (很想将您的答案标记为最终答案,但关于对齐的主要问题仍然存在..)
  • 我很高兴它有所帮助,关于整个应用程序的更改,您可以尝试仅在 GUI 对象上使用 setLocale() 方法,但我不确定这是否有效。
  • 关于对齐,link 有帮助吗?
  • 呵呵。在我发布问题之前,我会做一些研究。是的。我已经试过了。它只影响项目的标签,而不影响快捷方式。它看起来像这样: [....Open Ctrl+O] 而不是:[Open.... Ctrl+O] 但是 +1 表示努力 ;)
  • 你能试试这个吗 mUndo.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);请问?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多