Как установить пользовательский интерфейс для всех компонентов типа в Java Swing? - PullRequest
5 голосов
/ 30 августа 2011

Я создал свой собственный класс MyScrollbarUI, чтобы в моем приложении настраивался вид полосы прокрутки.Теперь я должен сделать

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

на любом ScrollPane, который я использую.

Можно ли как-то сказать Swing, что он должен использовать MyScrollbarUI на любой полосе прокрутки.Может быть через UIManager?

Ответы [ 4 ]

13 голосов
/ 30 августа 2011
UIManager.put("ScrollBarUI", MyScrollbarUI.class.getName());

должен сделать трюк.

В вашем классе пользовательского интерфейса должен быть метод public static ComponentUI createUI(JComponent c), возвращающий экземпляр вашего пользовательского интерфейса.

3 голосов
/ 30 августа 2011

Попробуйте добавить свой пользовательский класс интерфейса в качестве ScrollPaneUI свойства UIManager По умолчанию это javax.swing.plaf.metal.MetalScrollPaneUI изменить его на свой пользовательский класс.

2 голосов
/ 30 августа 2011

технически, это так же просто, как сказать UIManager, какой делегат использовать (как уже упоминалось @Harry Joy), как

 UIManager.put("ScrollBarUI", "fully-qualified-className-of-customUI") 

Это эффективно установит один и тот же класс делегата для всех LAF, что может привести к неоптимальным визуальным эффектам для всех, кроме того, из которого вы расширили свой пользовательский интерфейс. Строго говоря, вам нужен один пользовательский класс для каждого LAF

0 голосов
/ 30 августа 2011

Создайте новый компонент ScrollPane, расширив JScrollPane и попросите свой пользовательский ScrollPane использовать MyScrollbarUI. Затем измените весь свой код, чтобы использовать пользовательскую ScrollPane вместо JScrollPane.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...