Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不使用winapi的情况下将项目添加到windows系统菜单_Java_Windows_Swing - Fatal编程技术网

Java 在不使用winapi的情况下将项目添加到windows系统菜单

Java 在不使用winapi的情况下将项目添加到windows系统菜单,java,windows,swing,Java,Windows,Swing,我正在查看是否可以在当前JFrame的Winwdows系统菜单中添加一项(“关于”应用程序) 正如中所建议的,我知道可以通过JNI/JNA和使用GetSystemMenu()的windows API来调整菜单,但我正在寻找在普通Java/Swing中是否可能 我在以下方面发现了一些可以说明这一点的东西: 这将在创建JFrame之前完成 JFrame.setDefaultLookAndFeelDecorated(true) 然后,在向帧添加任何内容之前,迭代帧的组件, 正在查找JMenu。找到后,

我正在查看是否可以在当前
JFrame
的Winwdows系统菜单中添加一项(“关于”应用程序)

正如中所建议的,我知道可以通过JNI/JNA和使用
GetSystemMenu()
的windows API来调整菜单,但我正在寻找在普通Java/Swing中是否可能

我在以下方面发现了一些可以说明这一点的东西:

这将在创建JFrame之前完成

JFrame.setDefaultLookAndFeelDecorated(true)

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

刚刚测试过,效果很好

唉,没有提供一个完整的sscce,我也没能在我的代码中实现它。在添加组件之前,在windows创建之后中断时,我没有看到
JMenu
。既不在第一级(
JRootPane
),也不在后续嵌入式组件(
JPanel
JLayeredPane
)中


如果重要的话,我在WinXP和Win7上处理Java 6/7,窗口被创建为一个新的JFrame(“某些标题”),我使用的是原生的look&feel
UIManager.getSystemLookAndFeelClassName()

当使用跨平台的look-and-feel时,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中