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的一部分。