Java Swing TextArea“粘性文本”[重复]

Posted

技术标签:

【中文标题】Java Swing TextArea“粘性文本”[重复]【英文标题】:Java Swing TextArea "Sticky Text" [duplicate] 【发布时间】:2016-03-10 14:07:24 【问题描述】:

我正在尝试使用 java 创建一个 TextArea,其中包含无法删除/更新的文本。话虽如此,用户仍然可以添加到 TextArea 并删除他们自己的文本。

我尝试过获取 TextArea 的长度并监听“退格”按键,但是我仍然可以选择 TextArea 中的所有文本并替换它。

示例代码 (TA是TextArea)

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();
    

如果这个问题已经被问过,我深表歉意。

提前感谢您!

【问题讨论】:

如果我正确理解您的问题。您总是想要在 TextArea 中看到的文本。在这种情况下 a) 首先使用粘性填充文本区域 b) 禁用退格,就像您已经完成的那样 c) 当用户键入内容时,您使用“用户文本”+“粘性”更新文本区域,不需要 backSpace()然后方法 - 仅 TA.disable() 用于退格键事件。如果用户想删除他/她自己的文本,他们可以使用“删除”而不是退格 - 我假设它没问题。因为“删除”没有被禁用。现在当用户选择所有文本并删除时,你会用粘性更新文本。 【参考方案1】:

不要让用户直接输入文本,而是捕获相应的事件并手动将文本设置为 textField。然后您可以实施检查(例如,如果文本以您的粘性文本开头),如果没有再次将其添加到开头。如果是,则只需在文本末尾添加键入的键即可。 更多解决方案请关注here

【讨论】:

以上是关于Java Swing TextArea“粘性文本”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Java Swing TextArea 中的突出显示颜色?此外,更改与突出显示位置对应的文本的开头

TextArea Swing 和 JavaFX 选择范围的区别

java的JTextArea 和 TextArea 到底有啥根本的区别。

java swing JPanel添加在JScrollPane上,有垂直的滚动条,可是滚动条拉到底,只显示了JPanel的一部分。

java Swing?????????????????????

当我在键盘上输入特定字母时,我想更新 TextArea(swing) 上的特定图像。如何?