java:JTextField 上的完全受控输入

Posted

技术标签:

【中文标题】java:JTextField 上的完全受控输入【英文标题】:java: fully controlled input on JTextField 【发布时间】:2011-04-26 07:57:04 【问题描述】:

我想要一个JTextField(或另一个支持焦点和光标的类似文本的输入——或者我应该自己编写代码?)我想完全控制即时输入。 IE。我想忽略大多数输入并专门处理其余输入。 JFormattedTextField 似乎不是我想要的,因为它不是在立即输入而是在失去焦点时进行验证。

我尝试添加一个关键监听器,但我应该如何使用它有点不明显。似乎我可以在keyPressed 中捕捉光标更改(通过键)或复制/粘贴(通过键快捷键)之类的事件,并且我可以在keyTyped 中捕捉所有正常的键输入。我不确定如何捕捉光标更改或通过鼠标进行的复制/粘贴(由于某种原因,右键单击无论如何都不起作用,因此在上下文菜单中通过鼠标复制/粘贴似乎是不可能的,但我不确定这是否可能是一个不同的问题,或者它是否应该起作用,但由于某种原因不起作用)。

我基本上想要以下处理程序:

interface InputHandler 
   void addStringAt(int pos, String s);
   void deleteSubString(int pos, int len);
   void setFocusTo(int pos);

用户绝对不可能将任何不通过此处理程序的内容放到文本框中。

现在,我似乎必须处理很多特定情况(比如在某些架构上,可能有一些上下文菜单,他们可以在其中复制/粘贴或输入内容,手动处理所有鼠标事件等) .

或者其他方式,也涉及很多特殊处理:自己重新编码这样的输入字段。这似乎仍然更节省,因为我可以确定没有棘手的方法可以让用户绕过处理程序(我真的必须知道这一点)。顺便说一句,我该怎么做?我想扩展一个JLabel。如何扩展它以使其获得焦点?

我想知道你将如何实现这样的东西。

【问题讨论】:

【参考方案1】:

听起来您需要DocumentFilter。一些现有的问题将对此有所帮助:

Cut and Paste in JTextArea Help on writing your own javax.swing.text.Document

【讨论】:

以上是关于java:JTextField 上的完全受控输入的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中如何判断JTextField的一些问题?求高手解答……谢谢

将 JTextField 输入转换为整数

带有输入提示的 Java JTextField

java.swing JtextField 中怎么限制只能输入数字

java中JTextField输入的字符如何进行判断非法输入

java中如何实现在jtextfield中输入多行文字