Этот документ основан на статье, первоначально опубликованной в Соединении Swing.
Стиль Мультиплексирования позволяет Вам добавлять обычный стиль (названный стилем по умолчанию) с одним или более вспомогательными взглядами и чувствами. Например, Вы могли одновременно обеспечить текст к речи и Для слепых выводы, в дополнение к обычному визуальному выводу, который основанное на Swing приложение генерирует, добавляя два вспомогательных взгляда и чувства (один для текста к речи, другого для Шрифта Брайля) к стили по умолчанию. Стиль по умолчанию может быть любым обычным стилем - Java или стилем Windows, например - и не требует, чтобы никакие модификации работали со вспомогательным взглядом и чувствами.
Прежде, чем читать далее, следует быть знакомыми с понятием сменного взгляда и чувств. Для основной информации см., Как Установить Стиль, раздел в Учебном руководстве по Java. Для архитектурных деталей можно считать Сменную архитектуру стили, раздел в пределах статьи Соединения Swing.
Краткий обзор
Классы в javax.swing.plaf.multi реализация пакета стиль мультиплексирования. Стиль мультиплексирования прозрачно создает - и одновременно поддерживает - объекты UI от нескольких различных взглядов и чувств в ответ на компонент, запрашивающий его объект UI (с getUI метод).
Без стили мультиплексирования разработчик, который хотел улучшить определенный стиль, должен будет расширить классы, поддерживающие тот стиль. Например, чтобы добавить поддержку текста к речи стили Java, не используя стиль мультиплексирования, разработчик должен был бы создать группу классов, которые расширяют таковые из стили Java, и добавляют поддержку текста к речи новым классам. Если бы разработчик также хотел добавить поддержку текста к речи другому взгляду и чувствам, таким как Мотив или Windows, то разработчики должны были бы создать подклассы тех классов также.
У этого подхода есть по крайней мере два недостатка:
Во-первых, каждый подкласс должен использовать то, что является по существу копией того же самого кода, потенциально создавая трудную ситуацию с поддержкой для разработчика.
Во-вторых, и более значительно для конечного пользователя, некоторые разработчики приложений могли бы вынудить определенный стиль использоваться. Когда этот подход используется, конечный пользователь не может даже использовать улучшенный стиль.
Стиль мультиплексирования и эти проблемы одновременно, потому что это позволяет многократный взгляд и чувствует, чтобы быть объединенным. Первая проблема (имеющий необходимость использовать, что количество для второй копии того же самого кода) решается, потому что разработчик может создать специализированный стиль, который может тогда быть объединен с другим взглядом и чувствами.
Вторая проблема (имеющий необходимость вызвать использование определенного стили) решается, потому что специализированный стиль может использоваться с любым стилем по умолчанию, который приложение, возможно, заблокировало на месте.
Значение по умолчанию, мультиплексирующее реализацию стили, представленную MultiLookAndFeel класс в javax.swing.plaf.multi пакет, вызывается (неудивительно) стилем Мультиплексирования.
Как Использовать Вспомогательный Взгляд и Чувства
Это - удобный вспомогательный взгляд и чувства с Swing. Чтобы дать Swing команду использовать стиль Мультиплексирования, весь, приложение должно сделать, изменяют $JDKHOME/lib/swing.properties файл, чтобы включать определение swing.auxiliarylaf свойство. Swing обрабатывает swing.auxiliarylaf свойство как список разделенных запятой значений LookAndFeel подклассы, которые определяют, какой вспомогательный взгляд и чувства должны использоваться в дополнение к стили по умолчанию. Если по крайней мере один допустимый LookAndFeel подкласс определяется в swing.auxiliarylaf свойство, Swing автоматически использует стиль Мультиплексирования, чтобы загрузить и поддерживать и вспомогательный взгляд по умолчанию и чувства.
Например, давайте предполагать, что приложение использует стиль, который поддерживает обратную связь текста к речи, и также использует стиль, который добавляет поддержку устройства, которое испускает духи. Давайте предполагать, что стиль текста к речи называют com.myco.TextTalkerLookAndFeel, и стиль, который добавляет поддержку духов, называют com.smellco.OlfactoryLookAndFeel.
Чтобы сказать Swing использовать и они смотрят и чувства - и использовать стиль по умолчанию одновременно - Ваше приложение могло просто добавить следующую строку к $JDKHOME/lib/swing.properties файл:
Этот оператор говорит Swing получать UI компонента из стили Мультиплексирования автоматически, вместо того, чтобы получить это непосредственно из стили по умолчанию. Получающийся UI мультиплексирования является маленьким делегатом, который получает и поддерживает UIs от и вспомогательного взгляда по умолчанию и чувств. В результате, когда метод вызывается в мультиплексировании объект UI, мультиплексировании, UI вызывает тот же самый метод на каждый из UIs, полученных из и вспомогательного взгляда по умолчанию и чувств.
Подсказки для Записи Вспомогательного Стили
Вспомогательный стиль походит на любой другой стиль, за исключением того, что это не должно обеспечить полную поддержку, что стиль по умолчанию должен. Например, вспомогательный стиль, который поддерживает только обратную связь текста к речи, не должен обеспечить код для рисования. Кроме того, это, возможно, не должно было бы поддерживать все компоненты- JSeparators, например, мог бы быть проигнорирован.
Вспомогательный взгляд и чувства имеют тенденцию быть простыми, настолько разрабатывающий может быть легче чем разработка визуального стили. Разработчик может сконцентрироваться исключительно на обеспечении специализированной функциональности.
Поскольку основная цель вспомогательного стили состоит в том, чтобы улучшить стиль по умолчанию, вспомогательный взгляд и чувства склоняются быть невидимыми. Так как вспомогательный стиль является подлинным стилем, однако, нет ничего, чтобы препятствовать тому, чтобы он представил информацию о дисплее.
Точно так же как для любого другого стили, Вы реализуете вспомогательный стиль при записи подкласса javax.swing.LookAndFeel и создание подклассов FooUI классы, определенные в javax.swing.plaf пакет.
Следующие абзацы обеспечивают некоторые общие рекомендации для того, чтобы они разработали вспомогательный взгляд и чувства.
Используйте installUI метод, чтобы выполнить всю инициализацию, и uninstallUI метод, чтобы выполнить всю уборку.
installUI и uninstallUI методы вызываются, когда стиль компонента устанавливается. installUI метод дает новому объекту UI шанс добавить слушателей на компоненте и его модели данных. Точно так же uninstallUI метод позволяет предыдущему объекту UI удалять своих слушателей.
Не расширяйте визуальный взгляд и чувства.
Мы рекомендовали, чтобы Вы не реализовали классы UI вспомогательного стили как подклассы классов UI визуального стили. Почему нет? Поскольку они могли бы случайно наследовать код, который устанавливает слушателей на компонентном объекте или представляет компонент на дисплее. В результате Ваш вспомогательный стиль конкурировал бы со стилем по умолчанию вместо того, чтобы сотрудничать с этим.
Вместо этого мы рекомендуем, чтобы классы UI вспомогательного стили непосредственно расширили абстрактные классы UI в javax.swing.plaf пакет. При использовании этой стратегии разработчик вспомогательного стили может избежать конкурировать со стилем по умолчанию.
Переопределите все специфичные для UI методы, которые наследовали Ваши классы UI.
Мы рекомендуем, чтобы каждый класс UI вспомогательного стили переопределил методы, определенные в javax.swing.plaf Классы UI это убывает от причин этой рекомендации, подобны тем для того, чтобы не расширять визуальный стиль. Например, ComponentUI класс, от которого убывают все классы UI, обеспечивает реализацию по умолчанию для update метод. Эта реализация по умолчанию подрисовывает дисплей, если компонент непрозрачен. Если класс UI от невидимого вспомогательного стили не переопределяет этот метод, все непрозрачные компоненты появляются как пустые области на экране!
Во многих случаях Вы могли бы хотеть, чтобы вспомогательный стиль был "неполным". Таким образом, Вы, возможно, не должны были бы поддерживать полный набор компонентов. Например, вспомогательный стиль мог бы хотеть обеспечивать a ButtonUI подкласс, но нет LabelUI подкласс. Эта опция позволяется, и стиль мультиплексирования корректно обрабатывает такие ситуации.
По умолчанию, однако, Swing выпускает сообщение об ошибке, когда он просит у стили объект UI, и стиль не поддерживает тот UI. Это сообщение может быть раздражающим, особенно вспомогательным разработчикам стили, которые не хотят поддерживать определенный компонент.
К счастью, можно предотвратить это сообщение об ошибке, создавая подкласс UIDefaults класс и возврат экземпляра этого от getDefaults метод Вашего LookAndFeel класс. Например:
public class MyAuxLookAndFeel extends LookAndFeel { ... public UIDefaults getDefaults() { UIDefaults table = new MyAuxUIDefaults(); Object[] uiDefaults = { "ButtonUI", "MyAuxButtonUI", ... } table.putDefaults(uiDefaults); return table; } }
В предыдущем примере называют вспомогательный стиль MyAux создает a UIDefaults подкласс, который переопределяет getUIError метод. getUIError метод является методом, который вызывается, когда Swing не может найти объект UI в стили. Просто не делая ничто в этом методе, можно избежать сообщения об ошибке.
В редких экземплярах объект UI от вспомогательного стили может интересоваться объектом UI по умолчанию, используемым компонентом. В этих случаях объект UI от вспомогательного стили может получить UI из компонента, вызывая getUI метод. Возвращенный UI является экземпляром одного из стили мультиплексирования классы UI (например, MultiButtonUI). Объект UI от вспомогательного стили может вызвать getUIs метод возвращенного объекта получить массив, содержащий полный список всех объектов UI, обработанных мультиплексированием UI. Первым элементом, как гарантируют, будет UI, создаваемый из стили по умолчанию.
Как Стиль Мультиплексирования Реализуется
Стиль Мультиплексирования (представленный javax.swing.plaf.multi.MultiLookAndFeel) предназначается, чтобы быть прозрачным всем разработчикам и пользователям. Это должно "только работать" - и это используется только, когда пользователь говорит Swing использовать вспомогательный стиль.
Когда стиль Мультиплексирования используется, тип объекта UI, связанного с каждым компонентом, зависит от того, чувствует ли какой-либо вспомогательный взгляд и себя использующимся в настоящее время поддержка компонент. Если так, объект UI компонента является экземпляром мультиплексирования UI. Если только стиль по умолчанию поддерживает компонент, то компонент получает объект UI от стили по умолчанию, так же, как если бы никакой вспомогательный взгляд и чувства не были установлены.
Мультиплексирование объект UI получает и поддерживает объекты UI от и вспомогательного взгляда по умолчанию и чувств, обращаясь к этим UIs следующим способом:
Объект UI от стили по умолчанию является всегда первым, чтобы быть созданным. После этого объект UI создается из каждого вспомогательного стили в порядке, они определяются в swing.auxiliarylaf свойство.
Когда метод, который запрашивает информацию от объекта UI, вызывается, мультиплексирование объект UI вызывает метод на все объекты UI, но возвращает только следствия UI для стили по умолчанию. Например, когда getPreferredSize метод вызывается на мультиплексирование UI, UI возвращает только результаты вызова getPreferredSize на UI, полученном из стили по умолчанию. getPreferredSize метод также вызывается на объект UI для каждого вспомогательного стили, но возвращаемые значения игнорируются.
Когда метод, который не запрашивает информации от объекта UI, вызывается, мультиплексирование, объект UI вызывает тот метод на весь UIs - на объекте UI, полученном из стили по умолчанию и на всем UIs, полученном из вспомогательного взгляда и чувств, также. Например, вызов installUI метод на мультиплексировании UI заставляет мультиплексирование UI вызывать installUI на UI, полученном из стили по умолчанию и UIs, получается из вспомогательных фабрик.
Во всех случаях на объект UI, полученный из стили по умолчанию, действуют сначала, и затем на вспомогательный взгляд и чувства действуют в порядке, они определяются в swing.auxiliarylaf свойство.
Как Обеспечить Пользовательский Стиль Мультиплексирования
В то время как мы надеемся, что поведение стили Мультиплексирования достаточно гибко, чтобы не потребовать альтернативного стили мультиплексирования, Swing позволяет пользователю определять другой стиль мультиплексирования, чтобы использовать.
Чтобы сделать это, весь пользователь должен сделать, изменяют $JDKHOME/lib/swing.properties файл, чтобы включать определение swing.plaf.multiplexinglaf свойство. Swing тогда обрабатывает swing.plaf.multiplexinglaf свойство как a LookAndFeel подкласс, который поддерживает мультиплексирование.
Например, если пользователю представляли стиль мультиплексирования com.myco.SuperMultiLookAndFeel это - лучшее соответствие для их потребностей чем стиль Мультиплексирования (javax.swing.plaf.multi.MultiLookAndFeel), пользователь мог включать следующую строку в $JDKHOME/lib/swing.properties:
Этот оператор дает Swing команду использовать com.myco.SuperMultiLookAndFeel вместо javax.swing.plaf.multi.MultiLookAndFeel. Но если Вы используете этот вид оператора, быть осторожными, потому что поставщики вспомогательного взгляда и чувств наиболее вероятно разработают и протестируют против нашего стили Мультиплексирования.