6

我正在使用 144 dpi 纯平显示器在 Win7 上运行 Swing 应用程序。我的框架、选项窗格等的标题都以白色显示在透明背景上(Aero?)。总的来说,我喜欢 Aero,但是白色的标题很难读!我已经浏览了我能想到的所有 UIManager 属性,但它们似乎都没有任何效果。在 UIManager 之下是否有我可以达到的级别 - 并且最好为我的应用程序进行一次更改,因为我不想为每个选项窗格调用添加代码。也许我错过了一些非常基本的东西......但我们将不胜感激!

我也想更改标题字体,但这并不紧急!

另外,顺便说一句,您是在设置外观之前还是之后放置 UIManager.put 调用?还是没关系?


更多信息:我将 Win7 个性化更改为使用名为 Canada 的 Aero 主题,现在标题为黑色,使用合理的字体。所以我的问题变成了:

UIManager 属性如何与 Win7 主题相关,并且鉴于我无法预测用户将使用什么主题,我如何控制窗格标题的外观?


我将以另一种方式提出这个问题:为什么我不能更改应用程序显示面板中每个像素的颜色?UIManager之下是否有一个级别,这似乎在您被允许修改的内容方面非常有限......?

4

4 回答 4

5

这种方式会有点复杂,但是如果你需要自己的完全控制的容器,

1) 创建未装饰的 JFrame/JDialog

2) 在 NORTH 位置上,您可以JPanel使用GradientPaint来自Win7

3) 并将 3 JButtonswith Icon 放到JPanelwithGradientPaint

4) 将所需的事件添加到JButtons并且为了更好地输出到 GUI 将设置JButtons#setContentAreaFilled(false)

于 2011-11-27T18:01:09.153 回答
3

使用该setUndecorated(false)方法关闭宿主平台的窗口装饰。

下面是一个例子,虽然它是针对 Mac OS 平台的,但它可以为您提供一个起点。 在半透明框架/面板/组件上重新绘制。

于 2011-11-27T15:55:33.207 回答
1

也许本教程会有所帮助;它解释了如何改变 JFrame 装饰的外观和感觉。它还有一个演示程序,因此您可以检查差异。

默认情况下,JFrame 装饰的外观和感觉由操作系统管理,因为这样,应用程序更适合所使用平台的整体外观和感觉。但是你可以改变它并自己控制它;无需移除装饰并在您的框架内“伪造”它们。

缺点是,如果您自己设置装饰的外观和感觉而不是让操作系统来做,您可能必须考虑使用什么外观和感觉,这样您的窗口就不会与应用程序可能运行的任何平台发生冲突从。

于 2011-12-10T15:47:37.420 回答
0

如果您想控制窗口装饰器,请使用JFrame.setDefaultLookAndFeelDecorated(boolean)。将此设置为true,然后设置您的外观。

要为您查看这项工作,请先设置装饰器(如上),然后选择更可用的外观和感觉(即使它可能很难看),例如金属:钢或金属:海洋:

java -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel -Dswing.metalTheme=steel MyApp.jar

或者

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

确认这是您想要的,您可以返回并更改外观或其调色板。

于 2011-12-08T21:24:39.247 回答