在Java Swing中更改面板标题的颜色

时间:2011-11-27 15:46:20

标签: java swing windows-7 uimanager

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

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

另外,BTW,你在设置外观之前或之后放置了UIManager.put调用吗?或者不重要?


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

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


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

4 个答案:

答案 0 :(得分:5)

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

1)创建Un_decorated JFrame / JDialog

2)在NORTH possition上,您可以JPanel使用GradientPaint来模拟来自Win7

的容器

3)并将带有JButtons的3 JPanel放入GradientPaint

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

答案 1 :(得分:3)

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

下面是一个例子,虽然它适用于Mac OS平台,但它可能为您提供一个起点。 Re-paint on translucent frame/panel/component.

答案 2 :(得分:1)

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

默认情况下,JFrame的装饰外观由操作系统管理,因为这样,应用程序可以更好地适应正在使用的平台的整体外观。但你可以改变它并自己控制它;没有必要去除装饰和"假"它们在你的框架内。

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

运行

答案 3 :(得分:0)

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

要看到这项工作,首先设置装饰器(如上所示),然后选择更有用的外观(即使它可能很难看),例如Metal:Steel或Metal:Ocean:< / p>

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

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

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