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




Если у вас есть доступ к источнику, вы можете сделать это в основном методе:
// enable anti-aliased text:
System.setProperty("awt.useSystemAAFontSettings","on");
или (и если у вас нет доступа к источнику, или если это проще), вы можете просто передать указанные выше системные свойства в jvm, добавив эти параметры в командную строку:
-Dawt.useSystemAAFontSettings=on
Это не работает для Graphics#paintString(String, int, int)
Если вы работаете с API графики, это может помочь: docs.oracle.com/javase/tutorial/2d/text/renderinghints.html
Установка awt.useSystemAAFontSettings на on означает использовать сглаживание без субпиксельного рендеринга, что в большинстве случаев (при использовании ЖК-дисплея) является предпочтительным нет. Вместо этого используйте значение lcd. См. wiki.netbeans.org/FaqFontRendering
Только первая настройка работает. Эту вторую настройку использовать не нужно. Это недокументированная частная настройка, удаленная из JRE. См. Подробности: bugs.java.com/bugdatabase/view_bug.do?bug_id=6391267
Спасибо за информацию. Я сам думал об этом. Я использую SoapUI (www.eviware.com), и по умолчанию он НЕ использует текст AA. я добавил -Dawt.useSystemAAFontSettings = on -Dswing.aatext = true для командного файла, который запускает его, НО это НЕ имело значения. Думаю, я должен спросить у них на форуме.
он может интерпретировать аргументы как относящиеся к приложению, а не к jvm - вам может потребоваться немного углубиться в файл bat. (или это может не работать для всех приложений ... если да, дайте мне знать / проголосуйте за мой ответ ..)
Мне удалось заставить это работать, отредактировав файл запуска .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 $ *
Я считаю, что вы могли бы сделать то же самое с файлом soapui bat, добавив перечисленные здесь параметры -D .... в строку JAVA_OPTS или просто указав JAVA_OPTS = -Dawt.useSystemAAFontSettings = on -Dswing.aatext = true в окружающей среде
Для SoapUI в Windows я отредактировал файл SoapUI-5.0.0.vmoptions в папке «C: \ Program Files (x86) \ SmartBear \ SoapUI-5.0.0 \ bin» и добавил -Dawt.useSystemAAFontSettings = on -Dswing. aatext = true в последней строке.
Кроме того, порядок аргументов может иметь значение, вам нужно добавить аргументы перед любым -jar mycooljar.jar.
Для справки, я обнаружил, что на моем компьютере с Windows 7
Так что этот код следует использовать осторожно. Я думаю, он вообще перестанет быть нужен, когда все пользователи Linux обновятся до версий OpenJDK, которые по умолчанию хорошо обрабатывают псевдонимы.
Попробуйте System.setProperty ("awt.useSystemAAFontSettings", "lcd"); и вы должны получить ClearType.
Как пользователь Linux и Windows мне не нравится "cleartype". Я специально отключил его.
Элементы управления 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
этот метод не работает для внешнего вида Substance, вы знаете об этом?