Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true

Ответ 2

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

В приложениях, которые вы разрабатываете, если вы создаете собственный текст напрямую, вам также нужно сделать что-то вроде этого (в какой-то момент перед вызовом 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

Ответ 3

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

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

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

Ответ 4

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