2013-04-30 41 views
1

我有一个带有附加InputVerifiers的JTextFields的swing应用程序。我通过setText方法对字段应用了有效的默认值,例如以编程方式设置文本时未激活InputVerifiers

this.myField.setText("11"); 

但似乎public boolean verify(JComponent component)不被调用,除非焦点被应用到字段。我试图以编程方式请求焦点,但仍然不会触发InputVerifier,例如

this.myField.requestFocus(); 

如何以编程方式设置文本字段文本并让我的InputVerifier激发并运行其verify()方法?

我可以在构造它后调用InputVerifier,调用verify()并传入组件,但是由于TextField已经连接到InputVerifier,所以看起来真的没有必要。

+0

默认情况下,InputVerifier会触发这些事件如果实现Swing Action(ev ActionListener),通过包含shouldYieldFocus()&verify,可以应用于JSpinner和JComboBox的JTextComponents和派生编辑器,以便更快地发布[SSCCE] (http://sscce.org/),简短,可运行,可编译 – mKorbel 2013-04-30 12:43:27

+0

[您的SSCCE可以基于](http://www.java2s.com/Code/Java/Swing-JFC/InputVerificationDemo.htm) – mKorbel 2013-04-30 12:45:39

+0

认为你说要附加一个将会触发并调用输入验证器方法的Action?这个动作何时会被解雇? – 2013-04-30 12:46:42

回答

1

您可以在myField上设置DocumentFilter。你的verify()不应该有任何副作用,所以你可以在过滤器中使用它。当您拨打setText()或随时更改Document时,将应用该过滤器。

+0

虽然我的输入验证程序确实有副作用。也许我做错了。他们设置了“有效”标志,稍后可以查询该标志以确定表单上的所有字段是否有效。他们还根据是否通过验证来修饰该字段。 – 2013-04-30 13:03:04

+0

[API](http://docs.oracle.com/javase/7/docs/api/javax/swing/InputVerifier.html)说:“这种方法应该没有副作用。” – 2013-04-30 13:09:21

+0

对不起,这是有点超出了我原来的问题,但不清楚你将如何使用InputVerifiers管理在表单上执行“提交”功能的能力。你可以独立地检查每个字段,但如果字段放弃焦点,那么有什么东西可以让你检查所有字段的有效性状态,以确定你是否可以提交表单?这就是为什么我创建了自己的类来管理这个问题,并且我只需要根据请求手动触发验证器。也许DocumentFilter就是答案。 – 2013-04-30 13:25:30

3

我已经通过了的setText方法

应用领域的有效默认值。如果默认是有效的,为什么你需要调用输入验证?

我试图以编程方式请求将焦点

正确的方法使用的是:

component.requestFocusInWindow() 

然而,在可见的GUI请求焦点的组件上时,这仅适用。

哪里有什么可以让你检查所有的领域

这种逻辑的有效性状态应该是“提交”按钮的一部分。 InputVerifier应只检查字段的数据有效性。 “提交”逻辑进行检查以确保已输入所有字段的数据。

+0

因此,有效性逻辑在InputVerifier中,但除了显式调用verify(component)外,提交按钮行为如何检查所有字段的有效性? – 2013-04-30 16:11:25

+0

Submit按钮不需要验证每个组件,InputVerifier已经这样做了。所有提交按钮需要做的是确保所有文本字段包含数据(即文本字段不是空的)。 – camickr 2013-04-30 16:33:35

+0

如果你的InputVerifier不能保持焦点,你可以有无效的字段,需要检查。这是我的问题所在。 – 2013-04-30 16:42:44

相关问题