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

Почему шрифты в 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);
4b9b3361

Ответ 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 дней в неделю поддержка клиентов
  • Множество инструментов, доступных для решения любого типа выгодного предложения
  • Намного больше