java:JTextField 上的完全控制输入

标签 java textinput jtextfield

我想要一个 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/

相关文章:

java - 根据 JTextField 验证暂时禁用 JDialog 上的“确定”按钮

java - Junit4 - 测试超时清理

java - 尝试为域名创建模式

javascript - 左对齐文本输入 onblur (IE 8 & 9)

python - 在 Kivy Python 中制作具有预定义值的文本输入

ios - iOS 的 ScrollView 中缺少 TextInput,但 Android 中没有

java - 调用 `setText()` 时 JTextfield 未更新

java - 如何获取放置文档的 JTextField 名称?

java - 在运行 OSX 10.8.5 的 iMac 上使用 LWJGL 创建 FBO

java - 优化形态处理性能