Во многих приложениях Java по умолчанию не используются сглаженные шрифты, несмотря на возможность Swing предоставлять их. Как вы можете принудить произвольное приложение java использовать шрифты AA? (как для приложений, которые я запускаю, так и для приложений, которые я разрабатываю)
Как включить антиалиасинг в произвольных Java-приложениях?
Ответ 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 для командного файла, который запускает его, но это не изменило ситуацию. Думаю, я должен спросить на их форуме.