1

我在我的电脑上安装了一个名为“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 是这类事情的最佳选择吗?关于如何做到这一点的任何建议?

4

3 回答 3

1

我不确定我能否给你一个完整的答案——但你代码中的循环是错误的。

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

将“current”转换为“char”将创建一个表示“current”的ASCII值的“char”。ASCII 表中的前 27 个字符是不可打印的 - 所以这可能是你的盒子的原因。

尝试从 65 到 90 ('A' - 'Z') 开始,看看它是否有效。

于 2011-03-20T18:36:07.307 回答
1

查看 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;
        }
    }

}
于 2011-03-20T19:42:51.777 回答
0

使用 Font canDisplay() 方法确定 Java 无法显示此字体。

我最终切换到 C#,它对自定义字体有更好的支持(至少在这种特殊情况下)。

于 2011-03-21T13:57:44.270 回答