Переопределить один пользовательский интерфейс в Swing Look and Feel - PullRequest
4 голосов
/ 28 февраля 2012

Есть ли способ переопределить только L & F одного компонента пользовательского интерфейса (не один его экземпляр, а все экземпляры) с помощью пользовательского?По сути, я хочу переопределить значения по умолчанию для L & F.

Похоже, все это настраивается в BasicLookAndFeel#getDefaults

Я думаю, если бы мне действительно было нужно, я мог бы создать собственный внешний видэто расширяет тот, который я хочу использовать, и переопределяю его в методе initClassDefaults, но я бы предпочел просто иметь возможность переопределить любой используемый в настоящее время пользовательский интерфейс.

Я думал, что мог бы просто сделать UIManager.put(<ui_class_id>,<my-delegate-classname>)

Это не работает для примера, над которым я работаю, но это может быть потому, что я пытаюсь установить компонент, который не является частью стандартного внешнего вида (компонент добавляет самна).Я пытаюсь выяснить, является ли это даже правильным подходом.

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Ах, проблема в том, что я забыл реализовать createUI в своем интерфейсе.Как только я это сделал, я смог просто позвонить UIManager.put(<ui_class_id>,<my-delegate-classname>), и это сработало.

1 голос
/ 10 октября 2015

Вот решение для изменения L & F для компонента

JFileChooser fc = new JFileChooser();
WindowsFileChooserUI wui = new WindowsFileChooserUI(fc);
wui.installUI(fc);

Вы можете найти весь существующий интерфейс компонента класса

com.sun.java.swing.plaf.(L&F).*;
1 голос
/ 28 февраля 2012

Из учебников по Java:

Изменение внешнего вида после запуска

Вы можете изменить L & F с помощью setLookAndFeel даже после того, как программа GUI виден. Чтобы существующие компоненты отражали новый L & F, вызывать метод updateComponentTreeUI SwingUtilities один раз для контейнер верхнего уровня. Тогда вы можете изменить размер каждого верхнего уровня контейнер, чтобы отразить новые размеры его содержащихся компонентов. За Пример:

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

Другими словами: вы можете изменить внешний вид контейнера верхнего уровня (я не проверял, ограничен ли он только контейнерами верхнего уровня или этот метод может быть применен к любому контейнеру). Или, чтобы ответить на ваш вопрос еще точнее: я не вижу способа стилизации одного компонента, но есть способ для отдельных компонентов в (toplevel) контейнерах .

...