Java JTextArea 字体

发布于 2024-10-24 17:39:47 字数 498 浏览 4 评论 0原文

我的电脑上安装了一个名为“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 是此类事情的最佳选择吗?关于如何执行此操作有什么建议吗?

I have a custom font installed on my PC called "BMW1". I'm trying to loop through all entries in this font and display them in a JTextArea.

I have the following code:

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);

When I run my program, it just prints out those little boxes (which I assume means it couldn't find a font entry for that iteration).

Am I doing something wrong here? Is JTextArea the best option for this sort of thing? Any suggestions on how to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦回旧景 2024-10-31 17:39:47

我不确定我可以给你一个完整的答案 - 但你的代码中的循环是错误的。

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

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

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

I'm not sure I can give you a full answer - but the loop in your code is wrong.

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

The casting of 'current' into a 'char' will create a 'char' representing the ASCII value of 'current'. The first 27 characters in the ASCII table are non printable - so this might be the reason for your boxes.

Try starting from 65 till 90 ('A' - 'Z') to see if it works.

萌无敌 2024-10-31 17:39:47

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

}

Check out the Font.canDisplay(...) methods to help you determine if your font can be used.

I've used a JTextArea for this purpose.

Here is a simple demo that lists the font available on your machine:

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

}
早乙女 2024-10-31 17:39:47

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

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

Used Font canDisplay() methods to determine that Java can't display this font.

I ended up switching to C# which has better support for custom fonts (at least in this particular case).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文