1

我想创建一种可以分析 a 的方法,String并且每当/r找到文本命令(例如,将文本变为红色)时,不会显示文本命令并将其应用于命令后面的文本。

例如,一个字符串:

"Hello /rworl/bd"

输出如下:

"Hello world" 

"Hello worl"将是红色文本,最终d将是蓝色。我知道如何更改文本颜色,使其变为粗体等。

在命令后选择文本的好方法是什么?

4

2 回答 2

2

我找不到在 JTextArea 上使用多种字体的好方法,但在这里它使用标签和 html。当你输入的字母会是黑色的。如果您按“/”,它将等待文本字符来决定颜色。如果然后按“r”,则以下字母的字体将设置为红色,“b”为蓝色。

public class TextColour implements KeyListener {
    JLabel label;
    String red = "<font color='FF0000'>";
    String blue = "<font color='0000FF'>";
    String text = "";
    boolean colour = false;

    public static void main(String[] args) {
        new TextColour();

    }

    public TextColour() {
        JFrame frame = new JFrame();
        JTextArea area = new JTextArea();

        area.addKeyListener(this);
        label = new JLabel();

        frame.setPreferredSize(new Dimension(400, 100));
        frame.getContentPane().add(area);
        frame.getContentPane().add(label);

        frame.pack();
        frame.setVisible(true);
    }

    @Override
    public void keyPressed(KeyEvent key) {
        char letter = key.getKeyChar();
        if (colour) {
            if (letter == 'r') {
                text += red;
            } else if (letter == 'b') {
                text += blue;
            }
            colour = false;
        } else if (letter == '/') {
            colour = true;
        } else {
            text += key.getKeyChar();
        }
        label.setText("<html>" + text + "</html>");
    }

    @Override
    public void keyReleased(KeyEvent arg0) {
    }

    @Override
    public void keyTyped(KeyEvent arg0) {
    }
}
于 2012-05-19T02:10:00.340 回答
1

JTextArea是纯文本的组件。可以设置一种字体、样式和大小,以及一种前景色和背景色。对于格式化的不可编辑文本,JLabel请按照@Glitch 的建议使用 a。对于可编辑的文本,请使用JEditorPane或之类的组件JTextPane

请参阅教程的如何使用编辑器窗格和文本窗格部分:更多详细信息、工作代码..和可爱的屏幕截图。:)

在此处输入图像描述

于 2012-05-20T04:52:45.403 回答