覆盖LookAndFeel

时间:2012-09-19 09:38:04

标签: java swing look-and-feel jprogressbar uimanager

您好我正试图在java中更改我的swing进度条的颜色。 最初我尝试使用以下代码:

UIManager.put("ProgressBar.selectionBackground", Color.black);
UIManager.put("ProgressBar.selectionForeground", Color.white);
UIManager.put("ProgressBar.background", Color.white);
UIManager.put("ProgressBar.foreground", Color.RED);
m_progressBar.setBackground(Color.BLACK);
m_progressBar.setForeground(Color.red);

但是这些命令似乎没有任何效果! 除非我设置m_progressBar.stringPainted(true)然后前景确实改变了。

Anyhows我知道问题来自以下命令:UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 在初始化UI之前调用它。

所以我的问题是:
1)出于好奇:为什么stringPainted(true)调用设法覆盖前景UI设置?
2)如何将UIManager.setLookAndFeel保留在代码的开头并仍覆盖UI设置?

谢谢!

1 个答案:

答案 0 :(得分:2)

试试这个.............

`Changing the Look and Feel After Startup`

You can change the L&F with setLookAndFeel even after the program's GUI is visible. To make existing components reflect the new L&F, invoke the SwingUtilities updateComponentTreeUI method once per top-level container. Then you might wish to resize each top-level container to reflect the new sizes of its contained components.

例如:

UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();

换句话说:您可以更改顶级容器的外观(如果仅限于顶级容器,或者此方法可以应用于任何容器,则我没有进行测试)。或者,更准确地回答你的问题:我没有看到有单一组件样式的方法,但是在(顶层)容器中有单一组件的方法。