我想要一个 JTextField
(或其他支持焦点和光标的类似文本的输入 - 或者也许我应该编写自己的代码?),我想在其中完全控制即时输入。 IE。我想忽略大多数输入并专门处理其余的输入。看来 JFormattedTextField
不是我想要的,因为它不是在立即输入上进行验证,而是在焦点丢失时进行验证。
我尝试添加一个关键监听器,但我应该如何使用它有点不明显。看来我可以在 keyPressed
中捕获诸如光标更改(通过按键)或复制/粘贴(通过按键快捷键)之类的事件,并且我可以在 keyTyped
中捕获所有正常的按键输入。我不确定如何捕捉光标更改或通过鼠标进行的复制/粘贴(出于某种原因,右键单击无论如何都不起作用,因此在上下文菜单中通过鼠标复制/粘贴似乎不可能,但我不确定这是否可能是一个不同的问题,或者它是否应该工作但由于某种原因不起作用)。
我基本上想要类似以下处理程序的东西:
interface InputHandler {
void addStringAt(int pos, String s);
void deleteSubString(int pos, int len);
void setFocusTo(int pos);
}
用户绝对不可能将任何不经过此处理程序的内容放入文本框。
现在,似乎我必须处理很多特定情况(例如在某些架构上,可能有一些上下文菜单,他们可以在其中复制/粘贴或输入某些内容,手动处理所有鼠标事件等)。
或者另一种方式,这也涉及很多特殊处理:我自己重新编码这样的输入字段。这看起来仍然很省钱,因为我可以确定,用户没有任何棘手的方法可以绕过处理程序(而且我确实必须确定这一点)。顺便说一句,我该怎么做?我想扩展一个JLabel
。我如何扩展它才能获得焦点?
我想知道你会如何实现这样的事情。
最佳答案
听起来你需要一个 DocumentFilter
。几个现有的问题将有助于解决这个问题:
关于java:JTextField 上的完全控制输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3949062/