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中