Spec-Zone .ru
спецификации, руководства, описания, API
Используя Стиль Мультиплексирования

Этот документ основан на статье, первоначально опубликованной в Соединении Swing.


Стиль Мультиплексирования позволяет Вам добавлять обычный стиль (названный стилем значения по умолчанию) с одним или более вспомогательными взглядами и чувствами. Например, Вы могли одновременно обеспечить текст к речи и Для слепых выводы, в дополнение к обычному визуальному выводу, который основанное на Swing приложение генерирует, добавляя два вспомогательных взгляда и чувства (один для текста к речи, другого для Шрифта Брайля) к стили значения по умолчанию. Стиль значения по умолчанию может быть любым обычным стилем - Java или стилем Windows, например - и не требует, чтобы никакие модификации работали со вспомогательным взглядом и чувствами.

У этого документа есть следующие разделы:

Прежде, чем читать далее, следует быть знакомыми с понятием сменного взгляда и чувств. Для основной информации см., Как Установить Стиль, раздел в Учебном руководстве по Java. Для архитектурных деталей можно считать Сменную архитектуру стили, раздел в пределах статьи Соединения Swing.


Краткий обзор

Классы в javax.swing.plaf.multi реализация пакета стиль мультиплексирования. Стиль мультиплексирования прозрачно создает - и одновременно поддерживает - объекты UI от нескольких различных взглядов и чувств в ответ на компонент, запрашивающий его объект UI (с getUI метод).

Без стили мультиплексирования разработчик, который хотел улучшить определенный стиль, должен будет расширить классы, поддерживающие тот стиль. Например, чтобы добавить поддержку текста к речи стили Java, не используя стиль мультиплексирования, разработчик должен был бы создать группу классов, которые расширяют таковые из стили Java, и добавляют поддержку текста к речи новым классам. Если бы разработчик также хотел добавить поддержку текста к речи другому взгляду и чувствам, таким как Мотив или Windows, то разработчики должны были бы создать подклассы тех классов также.

У этого подхода есть по крайней мере два недостатка:

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

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

Значение по умолчанию, мультиплексирующее реализацию стили, представленную MultiLookAndFeel class в 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.auxiliarylaf=com.myco.TextTalkerLookAndFeel,
       com.smellco.OlfactoryLookAndFeel

Этот оператор говорит Swing получать UI компонента из стили Мультиплексирования автоматически, вместо того, чтобы получить это непосредственно из стили значения по умолчанию. Получающийся UI мультиплексирования является маленьким делегатом, который получает и поддерживает UIs от значения по умолчанию и вспомогательного взгляда и чувств. В результате, когда метод вызывается в мультиплексировании объект UI, мультиплексировании, UI вызывает тот же самый метод на каждый из UIs, полученных из значения по умолчанию и вспомогательного взгляда и чувств.


Подсказки для Записи Вспомогательного Стили

Вспомогательный стиль походит на любой другой стиль, за исключением того, что это не должно обеспечить полную поддержку, что стиль значения по умолчанию должен. Например, вспомогательный стиль, который поддерживает только обратную связь текста к речи, не должен обеспечить код для рисования. Кроме того, это, возможно, не должно было бы поддерживать все компоненты- JSeparators, например, мог бы быть проигнорирован.

Вспомогательный взгляд и чувства имеют тенденцию быть простыми, настолько разрабатывающий может быть легче чем разработка визуального стили. Разработчик может сконцентрироваться исключительно на обеспечении специализированной функциональности.

Поскольку основная цель вспомогательного стили состоит в том, чтобы улучшить стиль значения по умолчанию, вспомогательный взгляд и чувства склоняются быть невидимыми. Так как вспомогательный стиль является подлинным стилем, однако, нет ничего, чтобы препятствовать тому, чтобы он представил информацию о дисплее.

Точно так же как для любого другого стили, Вы реализуете вспомогательный стиль при записи подкласса javax.swing.LookAndFeel и создание подклассов FooUI классы, определенные в javax.swing.plaf пакет.


Dos и Don'ts

Следующие абзацы обеспечивают некоторые общие рекомендации для того, чтобы они разработали вспомогательный взгляд и чувства.

Используйте installUI метод, чтобы выполнить всю инициализацию, и uninstallUI метод, чтобы выполнить всю уборку.

Не расширяйте визуальный взгляд и чувства.

Переопределите все специфичные для UI методы, которые наследовали Ваши классы UI.


Расширение UIDefaults

Во многих случаях Вы могли бы хотеть, чтобы вспомогательный стиль был "неполным". Таким образом, Вы, возможно, не должны были бы поддерживать полный набор компонентов. Например, вспомогательный стиль мог бы хотеть обеспечивать a ButtonUI подкласс, но нет LabelUI подкласс. Эта опция позволяется, и стиль мультиплексирования корректно обрабатывает такие ситуации.

По умолчанию, однако, Swing выпускает сообщение об ошибке, когда он просит у стили объект UI, и стиль не поддерживает тот UI. Это сообщение может быть раздражающим, особенно вспомогательным разработчикам стили, которые не хотят поддерживать определенный компонент.

К счастью, можно предотвратить это сообщение об ошибке, создавая подкласс UIDefaults class и возврат экземпляра этого от getDefaults метод Вашего LookAndFeel class. Например:

public class MyAuxLookAndFeel extends LookAndFeel {
   ...
   public UIDefaults getDefaults() {
       UIDefaults table =
           new MyAuxUIDefaults();
       Object[] uiDefaults = {
         "ButtonUI", "MyAuxButtonUI",
         ...
       }
       table.putDefaults(uiDefaults);
       return table;
   }
}

class MyAuxUIDefaults extends UIDefaults {
   protected void getUIError(String msg) {
       //System.err.println
       //  ("An annoying message!");
   }
}

В предыдущем примере называют вспомогательный стиль MyAux создает a UIDefaults подкласс, который переопределяет getUIError метод. getUIError метод является методом, который вызывается, когда Swing не может найти объект UI в стили. Просто не делая ничто в этом методе, можно избежать сообщения об ошибке.


Исследование Других Объектов 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, полученный из стили значения по умолчанию, действуют сначала, и затем на вспомогательный взгляд и чувства действуют в порядке, они определяются в 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.plaf.multiplexinglaf = com.myco.SuperMultiLookAndFeel

Этот оператор дает Swing команду использовать com.myco.SuperMultiLookAndFeel вместо javax.swing.plaf.multi.MultiLookAndFeel. Но если Вы используете этот вид оператора, быть осторожными, потому что поставщики вспомогательного взгляда и чувств наиболее вероятно разработают и протестируют против нашего стили Мультиплексирования.