From a taken example of this link, made an example where it is possible to change the text at runtime, using the classes StyleContext and AttributeSet. To use, simply adapt the component ColorPane in your code, and pass the desired color along with the text in the method append, as the user who is typing.
Follows the code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
public class ChangeColorPaneTest extends JFrame {
    JTextField field;
    ColorPane pane;
    boolean alternate = true;
    public void startFrame() {
        pane = new ColorPane();
        pane.setBackground(new Color(245, 245, 245));
        field = new JTextField();
        field.setPreferredSize(new Dimension(getSize().width, 25));
        field.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //action apenas para fins de exemplificação
                Color textColor = alternate ? Color.red : Color.BLUE;
                pane.append(textColor, field.getText());
                alternate = !alternate;
                field.setText("");
            }
        });
        JScrollPane scrollpane = new JScrollPane(pane);
        scrollpane.setPreferredSize(new Dimension(400, 200));
        setTitle("ColorPane example");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(scrollpane, BorderLayout.CENTER);
        add(field, BorderLayout.PAGE_END);
        field.requestFocusInWindow();
        pack();
        setVisible(true);
    }
    class ColorPane extends JTextPane {
        public void append(Color c, String s) {
            //implementação utilizando StyleContext
            StyleContext sc = StyleContext.getDefaultStyleContext();
            AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY,
                    StyleConstants.Foreground, c);
            // tamanho do texto já no component
            int len = getDocument().getLength(); 
            // altera a posicao do cursor para o fim(se não houver seleção)
            setCaretPosition(len); 
            setCharacterAttributes(aset, false);
            //O \n é apenas para o texto ser quebrado
            //para fins de demonstracao
            //se não houver seleção, adiciona o texto no fim
            replaceSelection(s.concat("\n")); 
        }
    }
    public static void main(String argv[]) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                ChangeColorPaneTest pane = new ChangeColorPaneTest();
                pane.startFrame();
            }
        });
    }
}
Upshot:

Reference:
How to Use Editor Panes and Text Panes(Documentation)
							
							
						 
What have you tried to do? Add to the question what you have done so far.
– user28595