自定义Java窗口标题栏菜单

时间:2011-06-20 16:15:41

标签: java swing contextmenu jinternalframe custom-titlebar

我正在尝试允许用户在Java中更改窗口的标题而不向窗口本身添加组件。我实际上是用JInternalFrame来尝试这个,但是对于JFrame来说,解决方案应该类似。我只是想在右键单击窗口标题栏时弹出的上下文菜单中添加一个额外的菜单项。例如,下面的设置标题

enter image description here

这个例子是在Windows XP上,但也许有一种方法可以独立地获得窗口上下文菜单操作系统,或许类似于SystemTray.getSystemTray()(但对于应用程序中的单个窗口)。由此我可以提供自己的ActionListener来弹出一个对话框,供用户输入新标题。

这比我猜的更重要吗?有没有人有他们以前用过的解决方案?

2 个答案:

答案 0 :(得分:2)

简短的回答:我认为这不容易。如果可能的话,我不是100%确定。

首先,JFrame和JInternalFrame实际上是完全不同的。 JFrame是一个顶级组件,其标题栏等通常由操作系统提供。 JInternalFrame的全部内容(包括标题栏)由Swing LAF提供。

对于JInternalFrame,上下文菜单由LAF提供,而不是JInternalFrame本身。您必须对UIComponent执行某些操作才能更改上下文菜单。我认为你可能必须提供一个自定义UI组件才能做到这一点,这是丑陋的,通常打破不同的LAF或工作,但充其量看起来很糟糕。请参阅BasicInternalFrameTitlePanecreateSystemMenu方法。

答案 1 :(得分:1)

如果不深入研究Swing的内部UI系统,我认为这是不可能的,我甚至不会考虑这样做。为什么不使用JMenuBar的内置JInternalFrame

myInternalFrame.setJMenuBar(myMenuBar);