【发布时间】: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() 用于退格键事件。如果用户想删除他/她自己的文本,他们可以使用“删除”而不是退格 - 我假设它没问题。因为“删除”没有被禁用。现在当用户选择所有文本并删除时,你会用粘性更新文本。