【问题标题】:Making text commands such as coloring a text制作文本命令,例如为文本着色
【发布时间】:2012-05-18 23:11:10
【问题描述】:

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

例如一个字符串:

"Hello /rworl/bd"

输出如下:

"Hello world" 

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

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

【问题讨论】:

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

标签: java swing user-interface text jtextarea


【解决方案1】:

我找不到在 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) {
    }
}

【讨论】:

    【解决方案2】:

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

    请参阅教程的How to Use Editor Panes and Text Panes 部分以获取更多详细信息、工作代码..和可爱的屏幕截图。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-20
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      相关资源
      最近更新 更多