我正在寻找是否可以在当前JFrame
的Winwdows系统菜单中添加项目(“约”应用程序)。
正如在that answer中建议的那样,我知道可以通过JNI / JNA和带有GetSystemMenu()
的Windows API来调整菜单,但我在寻找它是否可能在普通vanilla Java / Swing。
我在that forum thread发现了一些可能的信息:
在创建JFrame
之前JFrame.setDefaultLookAndFeelDecorated(真);
然后,在向帧添加任何内容之前,迭代帧的组件, 寻找JMenu。找到后,添加'about'menuItem
刚刚测试过,效果很好。
唉,没有提供整个sscce,我没有设法让它在我的代码中运行。在添加组件之前在窗口创建之后进行断点处理时,我看不到JMenu
。既不是第一级(JRootPane
)也不是连续嵌入的组件(JPanel
,JLayeredPane
)。
如果重要,我在WinXP和Win7上处理Java 6/7,窗口创建为new JFrame("some title")
,我使用的是原生外观&感受UIManager.getSystemLookAndFeelClassName()
。
答案 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卡住。