Как включить сглаживание в произвольных Java-приложениях?

Многие приложения Java по умолчанию не используют шрифты со сглаживанием, несмотря на возможность Swing предоставлять их. Как заставить произвольное Java-приложение использовать шрифты AA? (как для приложений, которые я запускаю, так и для приложений, которые я разрабатываю)

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
50
0
33 218
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Если у вас есть доступ к источнику, вы можете сделать это в основном методе:

  // enable anti-aliased text:
  System.setProperty("awt.useSystemAAFontSettings","on");

или (и если у вас нет доступа к источнику, или если это проще), вы можете просто передать указанные выше системные свойства в jvm, добавив эти параметры в командную строку:

-Dawt.useSystemAAFontSettings=on

этот метод не работает для внешнего вида Substance, вы знаете об этом?

Rodrigo Asensio 09.03.2012 21:46

Это не работает для Graphics#paintString(String, int, int)

Ben Leggiero 11.12.2012 08:00

Если вы работаете с API графики, это может помочь: docs.oracle.com/javase/tutorial/2d/text/renderinghints.html

rcreswick 17.03.2014 00:16

Установка awt.useSystemAAFontSettings на on означает использовать сглаживание без субпиксельного рендеринга, что в большинстве случаев (при использовании ЖК-дисплея) является предпочтительным нет. Вместо этого используйте значение lcd. См. wiki.netbeans.org/FaqFontRendering

Piotr Dobrogost 26.11.2014 17:30

Только первая настройка работает. Эту вторую настройку использовать не нужно. Это недокументированная частная настройка, удаленная из JRE. См. Подробности: bugs.java.com/bugdatabase/view_bug.do?bug_id=6391267

clemep 19.11.2018 19:22

Спасибо за информацию. Я сам думал об этом. Я использую SoapUI (www.eviware.com), и по умолчанию он НЕ использует текст AA. я добавил -Dawt.useSystemAAFontSettings = on -Dswing.aatext = true для командного файла, который запускает его, НО это НЕ имело значения. Думаю, я должен спросить у них на форуме.

он может интерпретировать аргументы как относящиеся к приложению, а не к jvm - вам может потребоваться немного углубиться в файл bat. (или это может не работать для всех приложений ... если да, дайте мне знать / проголосуйте за мой ответ ..)

rcreswick 08.10.2008 00:05

Мне удалось заставить это работать, отредактировав файл запуска .sh так, чтобы последняя строка была такой: java -Dawt.useSystemAAFontSettings = on -Dswing.aatext = true -Dsoapui.properties = soapui.properties -Dgroovy.source.encoding = iso-8859-1 -cp $ SOAPUI_CLASSPATH com.eviware.soapui.SoapUIPro $ *

rcreswick 08.10.2008 00:14

Я считаю, что вы могли бы сделать то же самое с файлом soapui bat, добавив перечисленные здесь параметры -D .... в строку JAVA_OPTS или просто указав JAVA_OPTS = -Dawt.useSystemAAFontSettings = on -Dswing.aatext = true в окружающей среде

rcreswick 08.10.2008 00:16

Для SoapUI в Windows я отредактировал файл SoapUI-5.0.0.vmoptions в папке «C: \ Program Files (x86) \ SmartBear \ SoapUI-5.0.0 \ bin» и добавил -Dawt.useSystemAAFontSettings = on -Dswing. aatext = true в последней строке.

Aidan 27.06.2014 03:52

Кроме того, порядок аргументов может иметь значение, вам нужно добавить аргументы перед любым -jar mycooljar.jar.

bmurauer 02.10.2017 10:09

Для справки, я обнаружил, что на моем компьютере с Windows 7

  • Если я не использую это в своем коде, я получаю приятный субпиксельный рендеринг ClearType.
  • Но если я использую это, я получаю классический черно-белый антиалиасинг, который намного уродливее.

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

Попробуйте System.setProperty ("awt.useSystemAAFontSettings", "lcd"); и вы должны получить ClearType.

Domchi 03.05.2011 04:55

Как пользователь Linux и Windows мне не нравится "cleartype". Я специально отключил его.

Wyatt8740 05.12.2014 20:25

Элементы управления Swing в последних версиях Java 6/7 должны автоматически соответствовать общесистемным предпочтениям. (Если вы используете Windows L&F в ОС Windows, тогда текст должен отображаться с использованием ClearType, если у вас включен этот параметр для всей системы.) Так что, возможно, одним из решений может быть просто: включить собственный внешний вид?

В разрабатываемых вами приложениях, если вы визуализируете свой собственный текст напрямую, вам также необходимо сделать что-то вроде этого (в какой-то момент перед вызовом Graphics.drawText или друзьям):

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

Ссылка: http://weblogs.java.net/blog/chet/archive/2007/01/font_hints_for.html

Другие вопросы по теме