Font.createFont + сглаживание

Я связал шрифт .ttf внутри архива JAR, который я загружаю с помощью следующей процедуры:

[snip]
is = IdeUiUtil.class.getResourceAsStream(fontName);
font = Font.createFont(Font.TRUETYPE_FONT, is);
font = font.deriveFont(style, size);
[snip]

ОБНОВЛЕНИЕ: этот шрифт используется в заголовке TitledBorder и в конечном итоге будет использоваться в паре JLabels.

Проблема в том, что на платформе Windows все выглядит неровно. В Linux это хорошо сглажено. Что мне нужно сделать, чтобы он был сглажен и в Windows?


person exhuma    schedule 28.02.2011    source источник
comment
Это довольно старый вопрос, но я столкнулся с точно таким же. Если я загружаю шрифт из входного потока (и регистрирую его в GraphicsEnvoronment), этот шрифт не сглаживается, независимо от того, какие подсказки рендеринга используются. Особенно, если этот шрифт не загружается во время выполнения, а просто доступен в системных шрифтах, этот шрифт сглаживается. Кажется, это ошибка в Java.   -  person It's Leto    schedule 03.08.2014


Ответы (1)


Если вы рисуете с помощью Graphics, вы должны использовать:

Graphics2D g2d = (Graphics2D)getGraphics();
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

... но это не относится к объединению шрифта: это относится ко всем шрифтам, используемым с объектом Graphics.

Существует хак, чтобы применить это к панели. , но я не уверен, что он обновлен.

person Damien    schedule 28.02.2011
comment
для недавнего JDK также есть подсказка о Stackoverflow: stackoverflow.com/q/179955/438970 - person Damien; 28.02.2011
comment
Ну, AA, кажется, включен на всем, кроме TitledBorder, на котором я установил загруженный шрифт. Я также попытался установить этот шрифт на другие компоненты (в данном случае JLabels) и заметил, что они также не были сглажены. Если я использую системный шрифт, например «Arial», компоненты отображаются правильно. Но я воспользуюсь твоей подсказкой... - person exhuma; 28.02.2011