2

我正在寻找是否可以在当前JFrame.

正如该答案中所建议的那样,我知道可以通过 JNI/JNA 和 windows API 调整菜单GetSystemMenu(),但我正在寻找在普通的 Java/Swing 中是否可行。

我在那个论坛帖子中发现了一些东西,告诉它应该是可能的:

这是在创建 JFrame 之前

JFrame.setDefaultLookAndFeelDecorated(true);

然后,在向框架添加任何内容之前,迭代框架的组件,寻找 JMenu。找到后,添加您的“关于”菜单项

刚刚测试,工作正常。

唉,没有提供整个 sscce,我也没有设法让它在我的代码中工作。在添加组件之前在创建窗口之后设置断点时,我没有看到JMenu. 既不在第一级 ( JRootPane) 也不在相继嵌入的组件 ( JPanel, JLayeredPane) 中。

如果重要的话,我正在处理 WinXP 和 Win7 上的 Java 6/7,窗口被创建为 anew JFrame("some title")并且我使用的是本机外观UIManager.getSystemLookAndFeelClassName()

4

1 回答 1

3

JMenu 组件在使用跨平台外观时确实存在。组件的层次结构是:

class Test
  class javax.swing.JRootPane
    class javax.swing.JPanel
    class javax.swing.JLayeredPane
      class javax.swing.JPanel
      class javax.swing.plaf.metal.MetalTitlePane
        class javax.swing.plaf.metal.MetalTitlePane$SystemMenuBar
          class javax.swing.JMenu
        class javax.swing.JButton
        class javax.swing.JButton
        class javax.swing.JButton

不幸的是,当使用 Windows 的外观和感觉时,Java 根本不知道标题栏。您可能无法使用 JNA 或其他 laf。

于 2012-10-10T09:46:14.133 回答