【问题标题】:Custom Java Window Title Bar Menu自定义 Java 窗口标题栏菜单
【发布时间】:2011-06-20 16:15:40
【问题描述】:

我试图允许用户在不向窗口本身添加组件的情况下更改 Java 窗口的标题。我实际上是在用JInternalFrame 尝试这个,但认为JFrame 的解决方案应该是相似的。我只是想在右键单击窗口标题栏时弹出的上下文菜单中添加一个附加菜单项。比如下面的设置标题

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

这是比我想象的要大得多的任务吗?有没有人有他们以前使用过的解决方案?

【问题讨论】:

  • 本机操作系统的这个功能,你必须覆盖 WindowsListener,更改 DefalutCloseOperation.NOTHING_ON_CLOSE 并使用自定义 JMenu 和 JMenuItes 创建 JDialog,将此 JDialog 放置在窗口关闭事件的左上角窗口容器中

标签: java swing contextmenu jinternalframe custom-titlebar


【解决方案1】:

简短回答:我认为这并不容易。我不能 100% 确定这是否可能。

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

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

【讨论】:

  • +1 这基本上就是我所说的“挖掘得太深”。感谢您的详细说明:)
【解决方案2】:

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

myInternalFrame.setJMenuBar(myMenuBar);

【讨论】:

    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多