Шрифт Java JTextArea

У меня на компьютере установлен пользовательский шрифт под названием «BMW1». Я пытаюсь просмотреть все записи в этом шрифте и отобразить их в JTextArea.

У меня есть следующий код:

JTextArea displayArea = new JTextArea();
Font font = new Font("BMW1", Font.PLAIN, 72);
displayArea.setFont(font);

String sample = "";
for (int current = 0; current < 300; current++)
    sample += new Character((char)current).toString() + "\n";

displayArea.setText(sample);

Когда я запускаю свою программу, она просто распечатывает эти маленькие поля (что, как я полагаю, означает, что она не смогла найти запись шрифта для этой итерации).

Я делаю что-то не так здесь? Является ли JTextArea лучшим вариантом для такого рода вещей? Любые предложения о том, как это сделать?


person gmacster    schedule 20.03.2011    source источник


Ответы (3)


Я не уверен, что смогу дать вам полный ответ, но цикл в вашем коде неверен.

String sample = "";
for (int current = 0; current < 300; current++)
    sample += new Character((char)current).toString() + "\n";

Преобразование 'current' в 'char' создаст 'char', представляющий ASCII значение 'current '. Первые 27 символов в таблице ASCII не печатаются, поэтому это может быть причиной ваших полей.

Попробуйте начать с 65 до 90 ('A' - 'Z'), чтобы увидеть, работает ли это.

person RonK    schedule 20.03.2011
comment
Я понимаю, но шрифт, который я использую, не буквенно-цифровой. Это нотная запись. Я должен попробовать установить собственный буквенно-цифровой шрифт и посмотреть, работает ли он. Спасибо, в любом случае. - person gmacster; 21.03.2011
comment
@gmacster: в этом случае еще более маловероятно, что какие-либо кодовые точки указаны в нижних (‹ 300) областях. Если он совместим с Unicode (т. е. использует кодовые точки Unicode для идентификации глифов), то вы, возможно, захотите взглянуть на кодовые точки Unicode от U+2669 до U+266F и от U+1D100 до U1D1DD, среди прочих). - person Joachim Sauer; 21.03.2011

Ознакомьтесь с методами Font.canDisplay(...), чтобы определить, можно ли использовать ваш шрифт.

Я использовал JTextArea для этой цели.

Вот простая демонстрация, в которой перечислены шрифты, доступные на вашем компьютере:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;

public class ComboBoxFonts extends JFrame implements ItemListener
{
    JTextArea textArea;
    JComboBox comboBox;

    public ComboBoxFonts()
    {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();
        Font [] fonts = ge.getAllFonts ();
        comboBox = new JComboBox( fonts );
        comboBox.setRenderer( new MyFontRenderer() );
        comboBox.addItemListener( this );
        getContentPane().add( comboBox, BorderLayout.SOUTH );
        textArea= new JTextArea("Some text", 3, 20);
        getContentPane().add( new JScrollPane( textArea ) );
    }

    public void itemStateChanged(ItemEvent e)
    {
        Font font = (Font)e.getItem();
        textArea.setFont( font.deriveFont( textArea.getFont().getSize2D() ) );
        comboBox.setFont( font.deriveFont( comboBox.getFont().getSize2D() ) );
    }

    public static void main(String[] args)
    {
        ComboBoxFonts frame = new ComboBoxFonts();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    class MyFontRenderer extends BasicComboBoxRenderer
    {
        public Component getListCellRendererComponent(
            JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
        {
            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

            Font font = (Font)value;
            setFont( font.deriveFont(12.0f) );
            setText( font.getName() );

            return this;
        }
    }

}
person camickr    schedule 20.03.2011
comment
Спасибо за это, это помогло мне увидеть, что Java не очень хорошо поддерживает пользовательские шрифты. Я собираюсь попробовать С# и посмотреть, работает ли он лучше. - person gmacster; 21.03.2011

Использовали методы Font canDisplay(), чтобы определить, что Java не может отображать этот шрифт.

В итоге я переключился на С#, который лучше поддерживает пользовательские шрифты (по крайней мере, в этом конкретном случае).

person gmacster    schedule 21.03.2011