2013-10-01 5 views
0

Привет всем! У меня возникли проблемы с загрузкой пользовательских шрифтов в Java.Загрузка пользовательских шрифтов в Java

public class CustomFonts extends JPanel { 

public static void loadFont() throws FontFormatException, IOException { 
    String fontFileName = "stocky.ttf"; 
    InputStream is = CustomFonts.class.getClassLoader() 
      .getResourceAsStream(fontFileName); 

    Font ttfBase = Font.createFont(Font.TRUETYPE_FONT, is); 

    Font ttfReal = ttfBase.deriveFont(Font.PLAIN, 24); 

    GraphicsEnvironment ge = GraphicsEnvironment 
      .getLocalGraphicsEnvironment(); 
    ge.registerFont(ttfReal); 

} 

public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    frame.setTitle("Blach Blach Blach"); 
    frame.setSize(400, 400); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    try { 
     loadFont(); 
    } catch (FontFormatException | IOException e) { 
     e.printStackTrace(); 
    } 
    JLabel fontF = new JLabel("Testing 1, 2, 3"); 
    fontF.setFont(new Font("ttfReal", Font.PLAIN, 20)); 

    frame.add(fontF); 
} 

}

Когда я запускаю код шрифт только кажется, что по умолчанию один. Я загрузил файл ttf в папку проекта Eclipse, но должен ли я предоставить явный маршрут к файлу? Я пытаюсь понять шрифты через эту базовую программу, потому что я пытаюсь загрузить ее в большую программу.

+1

Ваш пользовательский шрифт не устанавливается правильно, так как шрифт с именем 'ttfReal' не найден. 'registerFont' не называет шрифт локальным именем объекта объекта Font. Вы можете определить имя своего собственного шрифта, указав [все имена шрифтов] (http://docs.oracle.com/javase/7/docs/api/java/awt/GraphicsEnvironment.html#getAvailableFontFamilyNames()), но вы можете найти проще просто сохранить пользовательский шрифт в переменной класса и получить его, когда вам нужно установить его версию. – Vulcan

ответ

0

Возможно установить статическую переменную класса.

public class CustomFonts extends JPanel { 
    private static Font ttfBase; 
} 

Затем, когда вы загружаете шрифт, загрузите его в ttfBase. Тогда в вашей основной,

public static void main (String [] args) { 
    ... 
    Font ttfReal = ttfBase.deriveFont(Font.PLAIN, 20); 
    fontF.setFont(ttfReal); 
    ... 
} 
Смежные вопросы