【发布时间】:2012-08-20 11:46:59
【问题描述】:
我正在使用 NetBeans GUI Builder 创建一个小型应用程序。首先,我只想说我可以手动编写所有代码并立即解决这个问题。但是,我想学习如何使用 GUI Builder。这是我的警告,所有不使用它的建议都会被否决。
话虽如此,我目前的情况是我有几个JFormattedTextFields,如果用户输入格式无效的数据,我想在其中显示错误消息。在每种情况下,逻辑都是相同的。唯一的区别是根据预期的确切格式(即四位数年份、正整数等)显示不同的错误消息。我想简单地编写一个可以重复用于每个文本字段的侦听器。我为第一个文本框写了如下方法:
private void formattedTextFieldFocustLost(java.awt.event.FocusEvent evt) {
JFormattedTextField source = (JFormattedTextField)evt.getComponent();
if (!source.isEditValid()) {
// TODO: Need a better error message.
JOptionPane.showMessageDialog(this, "Invalid input.", "Input Error", JOptionPane.ERROR_MESSAGE);
source.requestFocusInWindow();
}
}
方法签名由 NetBeans 生成,并从扩展 FocusAdapter 的匿名内部类的生成中调用。现在,当我转到 NetBeans 中的设计视图并单击另一个组件的 focusLost 事件的组合框时,此方法名称不会显示。
我还尝试创建一个扩展 FocusAdapter 的命名内部类。这也不会显示在事件处理程序组合框中。
如何为所有文本字段创建一个方法?
【问题讨论】:
-
会将其作为评论发布,因此您不能对我投反对票,但也许您根本不应该使用 FocusListeners,因为它们的级别非常低。对于这些情况,我一直更喜欢使用 InputVerifier。
-
@HovercraftFullOfEels 如果您想详细说明答案,请继续。我对其他选择持开放态度。我只是不想回答说“避免使用 NetBeans GUI Builder。手动编写代码 Swing 应用程序......”。与此同时,我会自己做一些研究;-)
-
但如果我发布了答案,我将不得不做出这样的声明。这几乎是一种反射:)。另外,我不确定如何在 NetBeans 环境中设置 InputVerifiers。我只知道如何“手工”完成。
-
@HovercraftFullOfEels 好吧。我已经提取了 API 文档。我会进一步研究它,看看它是否符合我的需求。感谢您的建议!
-
在摆弄 NetBeans 之后,我发现您似乎可以通过转到文本组件的“其他属性”列表来设置 InputVerifier,单击与 InputVerifier 关联的 ... 按钮属性,然后添加你的代码,比如
new MyInputVerifier()。然后,您可以在源代码中为 MyInputVerifier 添加一个私有内部类来进行验证。
标签: java user-interface netbeans