如何在java swing中为所有类型的组件设置UI?

时间:2011-08-30 10:51:34

标签: java swing scrollbar custom-component

我创建了自己的MyScrollbarUI类,以便在我的应用程序中显示自定义滚动条。现在我必须做

scrollPane.getHorizontalScrollBar().setUI(new MyScrollbarUI());
scrollPane.getVerticalScrollBar().setUI(new MyScrollbarUI());

在我使用的任何ScrollPane上。

是否有可能告诉Swing它应该在任何滚动条上使用MyScrollbarUI。也许是通过UIManager

4 个答案:

答案 0 :(得分:13)

UIManager.put("ScrollBarUI", MyScrollbarUI.class.getName());

应该这样做。

您需要在UI类中使用public static ComponentUI createUI(JComponent c)方法,并返回UI的实例。

答案 1 :(得分:3)

尝试将自定义UI类设置为UIManagerScrollPaneUI属性。默认情况下,javax.swing.plaf.metal.MetalScrollPaneUI会将其更改为您的自定义类。

答案 2 :(得分:2)

从技术上讲,告诉UIManager要使用哪个代表(如@Harry Joy已提到的那样)就像

一样容易
 UIManager.put("ScrollBarUI", "fully-qualified-className-of-customUI") 

这将有效地为所有LAF安装相同的委托类,除了扩展自定义ui-class之外,所有LAF可能会产生不太理想的视觉效果。严格来说,每个LAF需要一个自定义类

答案 3 :(得分:0)

通过扩展JScrollPane创建新的ScrollPane组件,并告诉您的自定义ScrollPane使用MyScrollbarUI。然后修改所有代码以使用自定义ScrollPane而不是JScrollPane。