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

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

Ответы [ 4 ]

71 голосов
/ 07 октября 2008

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

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

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

-Dawt.useSystemAAFontSettings=on
7 голосов
/ 16 августа 2012

Элементы управления 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

6 голосов
/ 25 января 2011

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

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

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

0 голосов
/ 07 октября 2008

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

...