Java 生成文本命令,例如为文本着色

Java 生成文本命令,例如为文本着色,java,swing,user-interface,text,jtextarea,Java,Swing,User Interface,Text,Jtextarea,我想制作一种方法,可以对字符串进行排序分析,每当找到文本命令(/r,例如,将文本变为红色)时,文本命令不会显示,并应用于命令后面的文本 例如,字符串: "Hello /rworl/bd" 产出如下: "Hello world" 但是“Hello worl”将以红色文本显示,最后的d将以蓝色显示。我知道如何更改文本颜色,使其加粗等 在命令后选择文本的好方法是什么?我找不到在JTextArea上使用多种字体的好方法,但这里它使用的是标签和html。当你输入时,字母将是黑色的。如果按“/”,它将

我想制作一种方法,可以对
字符串进行排序分析
,每当找到文本命令(
/r
,例如,将文本变为红色)时,文本命令不会显示,并应用于命令后面的文本

例如,字符串:

"Hello /rworl/bd"
产出如下:

"Hello world" 
但是
“Hello worl”
将以红色文本显示,最后的
d
将以蓝色显示。我知道如何更改文本颜色,使其加粗等


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

我找不到在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) {
    }
}
公共类TextColour实现KeyListener{
JLabel标签;
字符串红色=”;
字符串蓝色=”;
字符串文本=”;
布尔颜色=假;
公共静态void main(字符串[]args){
新文本颜色();
}
公共文本颜色(){
JFrame=新JFrame();
JTextArea=新的JTextArea();
area.addKeyListener(这个);
label=新的JLabel();
frame.setPreferredSize(新尺寸(400100));
frame.getContentPane().add(区域);
frame.getContentPane().add(标签);
frame.pack();
frame.setVisible(true);
}
@凌驾
按下公共无效键(KeyEvent键){
char letter=key.getKeyChar();
if(颜色){
如果(字母=='r'){
文本+=红色;
}else if(字母=='b'){
文本+=蓝色;
}
颜色=假;
}else if(字母=='/')){
颜色=真;
}否则{
text+=key.getKeyChar();
}
label.setText(“+text+”);
}
@凌驾
公共无效密钥已释放(KeyEvent arg0){
}
@凌驾
public void keyTyped(KeyEvent arg0){
}
}

JTextArea
是纯文本的一个组件。一个单一的字体,样式和大小,以及一个前景和背景颜色可以设置。对于格式化的不可编辑的文本,使用@Glitch建议的
JLabel
。对于可编辑的文本,请使用
JEditorPane
JTextPane
等组件

有关更多详细信息、工作代码和可爱的屏幕截图,请参见本教程的部分。:)


如果您的正则表达式不起作用,请将其包括在内,我们可以提供建议。对不起,JTextArea。我很少使用正则表达式,所以我首先考虑将字符串转换为数组并使用for循环,但可能有一种更简单的方法,这就是我在这里发布的原因。