在没有winapi的情况下将项目添加到Windows系统菜单

时间:2012-10-10 09:02:04

标签: java windows swing

我正在寻找是否可以在当前JFrame的Winwdows系统菜单中添加项目(“约”应用程序)。

正如在that answer中建议的那样,我知道可以通过JNI / JNA和带有GetSystemMenu()的Windows API来调整菜单,但我在寻找它是否可能在普通vanilla Java / Swing。

我在that forum thread发现了一些可能的信息:

  

在创建JFrame

之前      

JFrame.setDefaultLookAndFeelDecorated(真);

     

然后,在向帧添加任何内容之前,迭代帧的组件,   寻找JMenu。找到后,添加'about'menuItem

     

刚刚测试过,效果很好。

唉,没有提供整个sscce,我没有设法让它在我的代码中运行。在添加组件之前在窗口创建之后进行断点处理时,我看不到JMenu。既不是第一级(JRootPane)也不是连续嵌入的组件(JPanelJLayeredPane)。

如果重要,我在WinXP和Win7上处理Java 6/7,窗口创建为new JFrame("some title"),我使用的是原生外观&感受UIManager.getSystemLookAndFeelClassName()

1 个答案:

答案 0 :(得分:2)

使用跨平台外观时,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卡住。