如何在一个Java应用程序中为jFrame显示多个停靠项?

时间:2014-11-19 12:18:21

标签: java macos swing jframe dock

我有一个模块化Java应用程序:一个ja​​r启动一个“控制面板”,用户可以从中打开几个模块。每个模块都使用自己的jFrame。 (关于这是好事还是坏事的讨论可以找到here - 在我的例子中,模块都相互通信但执行不同的功能。)

在Windows上运行,每个模块(jFrame)在任务栏上都有自己的图标,可通过ALT选项卡进行选择。在OS X上,我只在Application Switcher(CMD-tab)中获得一个停靠图标和一个图标。这使得在模块之间切换非常尴尬,其中一些模块将在任何时候打开。

如何将每个模块(jFrame)分别放在OS X底座和应用程序切换器中?

有趣的是,如果我将其中一个jFrame图标化,它确实会出现在Dock中,在废纸篓的右侧区域。

我在OS X 10.10(Yosemite)上使用Java 7进行测试。我做了一个骗子的.app,它通过shell脚本启动jar,以便提供cmd-line参数(Xdock:name等)和图标 - 所以我有一个info.plist文件。

1 个答案:

答案 0 :(得分:0)

你做不到。 OS X用户界面不能正常工作。

  

有趣的是,如果我将其中一个jFrame图标化,它确实出现在   码头,在垃圾桶的右侧区域。

这是用户可配置的。请参阅首选项> Dock>将窗口最小化到应用程序停靠区。

不是打击正常的操作系统行为,而是提出自己的“模块切换器”功能,或许将其作为控制面板的一部分。您会发现应用程序切换和停靠图标行为在操作系统之间存在很大差异。试图让OS X像Windows一样运行,反之亦然,超出应用程序范围将是一件非常令人头痛的问题。

那就是说,如果你不想听从上面的建议,我能想到做你想要的唯一方法是创建虚拟应用程序,它们不显示任何窗口,但确实显示在码头。虚拟应用程序可以由您的主应用程序启动。当单击虚拟应用程序时,它可以发出主应用程序的信号(可能是在本地开放端口上侦听)以使其中一个模块处于活动状态。这会让人觉得每个模块在码头都有自己的位置。这可能也适用于Alt-Tab切换器。