Почему шрифты в java 1.7 отличаются от 1.6?
Я строил среду разработки на Java (как небольшой исследовательский проект). В рамках этого я создал пользовательский текстовый компонент, который рисует сам текст, используя Graphics2d следующим образом:
g2.drawString("some text", 100, 100);
Все работало отлично, развивая вещи в Eclipse, используя 1.6 (я предполагаю, что это предоставлено Apple), пока я не упаковал все и не работал в java 1.7 (предоставлен Oracle). Очевидно, что в средах разработки шрифты очень важны, поэтому я был недоволен, увидев результаты в 1.7.
![enter image description here]()
Я пробовал упаковывать пользовательские шрифты, но все они кажутся зернистыми и размытыми. Сравнение выше не так уж плохо, но некоторые шрифты (например, Монако) выглядят ужасно.
Я предполагаю, что это связано с тем, как Apple перехватывает вещи в Quartz. Но есть ли способ улучшить ситуацию, чтобы он не выглядел ужасно в других системах? У кого-нибудь есть стратегия для этого?
Обновление: Это сравнение в Монако:
![enter image description here]()
и увеличенное сравнение C (в paintComponent) в Монако (1,7 слева, 1,6 справа). Обратите внимание, что я загружаю шрифт из локального файла ttf, используя:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("monaco.ttf");
Font customFont = null;
try
{
customFont = Font.createFont(Font.TRUETYPE_FONT, is);
customFont = customFont.deriveFont(16.0f).deriveFont(Font.BOLD);
is.close();
ge.registerFont(customFont);
} catch (FontFormatException e1)
{
e1.printStackTrace();
} catch (IOException e1)
{
e1.printStackTrace();
}
this.setFont(customFont);
![enter image description here]()
Обратите внимание, что сглаживание включено, используя:
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Ответы
Ответ 1
Java 6 была разработана Apple. Apple много работала над графическим слоем, чтобы заставить его работать с Quartz/ Cocoa и особенно, чтобы он выглядел хорошо.
Для Java 7 разработка была переделана Oracle. Это не означает, что Oracle получил источники от Apple. Вместо этого они начали (возможно, портировали некоторый код Unix в OS X). Это означает, что вся работа, которую Apple приложила к тому, чтобы Java выглядела хорошо на OS X, была в основном потеряна.
Apple много заботится о дизайне. Oracle... ну... не так много (выставить A, выставку B)
Что вы можете сделать?
- Запишите и отправьте патч в OpenJDK.
- Получите достаточно людей, которые хотят попросить Apple предоставить патч (деньги могут помочь).
- Вернитесь к Java 6
- Используйте JNI для прямого доступа к Cocoa/Quartz, чтобы получить механизм рендеринга шрифтов OS X.
Статьи по теме:
Ответ 2
Зарабатывайте деньги онлайн с накопителем прибыли - присоединяйтесь к крупнейшему в Великобритании сообществу ставок
- Подпишитесь на нашу бесплатную пробную версию и заработать более £ 45.
- 100% безналоговый заработок
- Полное обучающее и демонстрационное видео
- Более 340 000 клиентов за последние 4 года
- Чрезвычайно большое сообщество людей, готовых помогать друг другу, чтобы получать прибыль
- 7 дней в неделю поддержка клиентов
- Множество инструментов, доступных для решения любого типа выгодного предложения
- Намного больше