Spec-Zone .ru
спецификации, руководства, описания, API

Настольные Свойства AWT

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

Каждое настольное свойство называет уникальная строка, которая является "именем" того свойства.

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

Настольные свойства, задокументированные в другом месте, являются теми, которые сильно связываются с методом или классом, который документирует их.

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

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

Имя свойства Тип значения Сводное Описание
awt.font.desktophints java.util. Карта Сглаживание шрифта (текстовое сглаживание) настройки.
sun.awt.enableExtraMouseButtons java.lang. Булевская переменная Средства управления, если события от нажатия мыши от дополнительных кнопок должны быть сгенерированы или нет

Настольные Подсказки Рендеринга Шрифта

Настольное Свойство: "awt.font.desktophints"

Современные рабочие столы поддерживают различные формы текстового сглаживания (сглаживание шрифта).

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

Основное Использование

Стандартное настольное свойство, названное "awt.font.desktophints", может использоваться, чтобы получить подсказки рендеринга, которые лучше всего соответствуют настольные настройки. Возвращаемым значением является Карта RenderingHints которому можно непосредственно примениться к a Graphics2D.

Это - a Map поскольку больше чем одна подсказка может быть необходима. Если ненуль этому можно непосредственно примениться к Graphics2D.


Toolkit tk = Toolkit.getDefaultToolkit();
Map map = (Map)(tk.getDesktopProperty("awt.font.desktophints"));
if (map != null) {
    graphics2D.addRenderingHints(map);
}

Усовершенствованные Подсказки по Использованию

Прислушивание к изменениям

Приложение может прислушаться к изменениям в свойстве, используя a PropertyChangeListener :


tk.addPropertyChangeListener("awt.font.desktophints", pcl); 
Прислушивание к изменениям рекомендуется, поскольку пользователи, в редких случаях, могут реконфигурировать настольную среду, пока приложения работают в пути, который может влиять на выбор этих подсказок, и кроме того много настольных сред поддерживают динамическое реконфигурирование этих запускающих приложений, чтобы соответствовать новым настройкам.

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

Текстовое Измерение

Текст всегда должен измеряться, используя то же самое FontRenderContext как использующийся для того, чтобы представить. Текст, сглаживающий подсказку, является компонентом FontRenderContext. A FontMetrics полученный из Graphics объект, на котором была установлена подсказка, измерит текст соответственно. Это не уникальное требование для клиентов, которые определяют эту подсказку непосредственно, начиная со значения FontRenderContext никогда не должен приниматься, так обсуждается здесь преимущественно как напоминание.

Сохранение и восстановление Состояния графики

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


/**
  * Get rendering hints from a Graphics instance.
  * "hintsToSave" is a Map of RenderingHint key-values.
  * For each hint key present in that map, the value of that
  * hint is obtained from the Graphics and stored as the value
  * for the key in savedHints.
  */
RenderingHints getRenderingHints(Graphics2D g2d,
                                  RenderingHints hintsToSave,
                                  RenderingHints savedHints) {
     if (savedHints == null) {
         savedHints = new RenderingHints(null);
     } else {
         savedHints.clear();
     }
     if (hintsToSave.size() == 0) {
         return savedHints;
     }
     /* RenderingHints.keySet() returns Set */
     for (Object o : hintsToSave.keySet()) {
         RenderingHints.Key key = (RenderingHints.Key)o;
         Object value = g2d.getRenderingHint(key);
         savedHints.put(key, value);
     }
     return savedHints;
}


Toolkit tk = Toolkit.getDefaultToolkit();
Map map = (Map)(tk.getDesktopProperty("awt.font.desktophints"));
Map oldHints;
if (map != null) {
     oldHints = getRenderingHints(graphic2D, map, null);
     graphics2D.addRenderingHints(map);
     ..
     graphics2D.addRenderingHints(oldHints);
}


Детали

  • Возвращаемое значение всегда будет нулем или a Map

  • Если возвращаемое значение является нулем, то никакие настольные свойства не доступны, и динамические обновления не будут доступны. Это - типичное поведение, если JDK не распознает настольную среду, или это - то, у которого нет таких настроек. Бездисплейный инструментарий является одним таким примером. Поэтому важно протестировать против нуля перед использованием карты.

  • Если ненуль значение будет a Map из RenderingHints так, что каждый ключ является экземпляром RenderingHints.Key и значение является юридическим значением для того ключа.

  • Карта может содержать значение по умолчанию для подсказки. Это необходимо в конечном счете есть ранее значение не по умолчанию для набора подсказки на Graphics2D. Если карта не содержала значение по умолчанию, то addRenderingHints(Map) оставил бы предыдущую подсказку, которая, возможно, не соответствует настольной установке.

    Приложение может использовать setRenderingHints(Map) чтобы повторно инициализировать все подсказки, но это влияло бы на несвязанные подсказки также.

  • Многоэкранный рабочий стол может поддерживать настройки устройства на экран, когда возвращенное значение для экрана по умолчанию рабочего стола. Приложение может хотеть использовать настройки для экрана, на который они будут применены. Подсказки устройства на экран могут быть получены именами свойства для каждого устройства, которые создаются как Конкатенация строк
    
    "awt.font.desktophints" + "." + GraphicsDevice.getIDstring();
    

    Приложение может также прислушаться к изменениям на этих свойствах.

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

Функциональность мыши

Настольное Свойство: "sun.awt.enableExtraMouseButtons"

Это свойство определяет, позволяют ли событиям от дополнительных кнопок мыши (если они, существуют и включаются базовой операционной системой), быть обработанными и отправленными в {@code EventQueue}.
Значение могло быть изменено, передавая "sun.awt.enableExtraMouseButtons" значение свойства в java прежде, чем приложение запустится. Это могло быть сделано со следующей командой:

java -Dsun.awt.enableExtraMouseButtons=false Application
После того, как установленный на запуске приложения, невозможно изменить это значение после.
Текущая стоимость могла также быть запрошена, используя getDesktopProperty ("sun.awt.enableExtraMouseButtons") метод.
Если свойство устанавливается в {@code истина} тогда
  • все еще законно создать {@code MouseEvent} объекты со стандартными кнопками и, если у мыши есть более тогда три кнопки, также законно использовать кнопки от диапазона, запущенного от 0 до {@link java.awt.MouseInfo#getNumberOfButtons () getNumberOfButtons ()}.
  • законно использовать маски стандартной кнопки при использовании {@code Robot.mousePress ()} и {@code Robot.mouseRelease ()} методы и, если у мыши есть более тогда три кнопки, также законно использовать маски для существующих расширенных кнопок мыши. Тот путь, если есть более тогда три кнопки на мыши тогда, позволяется использовать маски кнопки, соответствующие кнопкам в диапазоне от 1 до {@link java.awt.MouseInfo#getNumberOfButtons () getNumberOfButtons ()}

Если свойство устанавливается в {@code ложь} тогда
  • законно создать {@code MouseEvent} объекты со стандартными кнопками только: {@code NOBUTTON}, {@code BUTTON1}, {@code BUTTON2} и {@code BUTTON3}
  • законно использовать маски стандартной кнопки только: {@code InputEvent. BUTTON1_DOWN_MASK}, {@code InputEvent. BUTTON2_DOWN_MASK}, {@code InputEvent. BUTTON3_DOWN_MASK}
Это свойство должно использоваться, когда нет никакой потребности в событиях от нажатия мыши слушания, запущенных в результате действия с дополнительной кнопкой мыши. По умолчанию это свойство устанавливается в {@code истина}.