Java Swing TextArea“;“粘性文本”;

Java Swing TextArea“;“粘性文本”;,java,swing,textarea,Java,Swing,Textarea,我正在尝试使用java创建一个文本区域,其中包含无法删除/更新的文本。也就是说,用户仍然可以添加到文本区域并删除自己的文本 我已经尝试过获取文本区域的长度,并聆听“backspace”键,但是我仍然可以选择文本区域中的所有文本并替换它 示例代码 (TA是文本区域) 及 如果已经有人问过这个问题,我很抱歉 提前谢谢你 不要让用户直接键入文本,而是捕获相应的事件,并手动将文本设置为文本字段。然后,您可以执行一个检查(例如,如果文本是以您的粘滞文本开头的),如果不是,则再次将其添加到开头。如果是,则只

我正在尝试使用java创建一个文本区域,其中包含无法删除/更新的文本。也就是说,用户仍然可以添加到文本区域并删除自己的文本

我已经尝试过获取文本区域的长度,并聆听“backspace”键,但是我仍然可以选择文本区域中的所有文本并替换它

示例代码 (TA是文本区域)

如果已经有人问过这个问题,我很抱歉


提前谢谢你

不要让用户直接键入文本,而是捕获相应的事件,并手动将文本设置为文本字段。然后,您可以执行一个检查(例如,如果文本是以您的粘滞文本开头的),如果不是,则再次将其添加到开头。如果是,则只需在文本末尾添加键入的键。

如果我正确理解您的问题,请寻找更多解决方案。您总是希望在文本区域中看到文本。在这种情况下,a)首先用粘性填充文本区域b)禁用backspace,就像您已经做的那样c)当用户键入某些内容时,您用“用户文本”+“粘性”更新文本区域,不需要backspace()方法,然后-只需对backspace键事件使用TA.disable()。如果用户想要删除他/她自己的文本,他们可以使用“删除”而不是退格-我假设可以。因为“删除”并没有被禁用。现在,当用户选择所有文本并删除时,您将使用sticky更新文本。
TA.setText(cmdx);
cmdLength = TA.getDocument().getLength();

TA.getKeymap().addActionForKeyStroke(
        KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0), new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                TA.disable();
                try {
                    backSpace();
                } catch (BadLocationException ex) {
                    Logger.getLogger(CmdFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
public void backSpace() throws BadLocationException {
    System.out.println("Backspace is pressed");
    int currentLength = TA.getDocument().getLength();

    if(currentLength > cmdLength)
    {
        Document doc = TA.getDocument();
        doc.remove(doc.getLength() - 1, 1);
        TA.enable();
    }
}