【发布时间】:2016-06-16 18:55:32
【问题描述】:
假设我有一个带有 3 个文本字段 First、Last 和 LastFirst 的 JDialog。当 LastFirst 接收到焦点时,它将被设置为 first 和 last 的串联,但前提是 first 和 last 不为空。这是我的示例中的相关代码,它不起作用: 我错过了什么?
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JOptionPane;
public class FieldValidatedSetting extends javax.swing.JFrame {
private javax.swing.JTextField txtFirst;
private javax.swing.JTextField txtLast;
private javax.swing.JTextField txtLastFirst;
//
//This is supposed to concatenate Last & First and set LastFirst.
// Empty First or Last fields should result in a message dialog
// and return for user correction. Problem is it issues the message twice!
// Please excuse the crummy layout./
// Constructor
private void txtLastFirstFocusGained(java.awt.event.FocusEvent evt)
if(txtLast.getText().isEmpty() || txtFirst.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "You must enter First & Last");
txtFirst.requestFocusInWindow();
} else{
txtLastFirst.setText(txtLast.getText() + txtFirst.getText());
}
}
public FieldValidatedSetting() {
txtFirst = new javax.swing.JTextField();
txtLast = new javax.swing.JTextField();
txtLastFirst = new javax.swing.JTextField();
txtLastFirst.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
txtLastFirstFocusGained(evt);
}
});
Container pane = getContentPane();
pane.setLayout(new GridLayout(1, 3));
pane.add(txtFirst);
pane.add(txtLast);
pane.add(txtLastFirst);
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new FieldValidatedSetting().setVisible(true);
}
});
}
}
【问题讨论】:
-
"What am I missing?"-- 如果您创建并发布了一个有效的minimal reproducible example 会很有帮助,这是一个小而完整的程序,只有必要的代码来演示您的问题,我们可以复制、粘贴、无需修改即可编译和运行,因为这将帮助我们充分了解您可能做错了什么。请注意,这是作为代码格式文本发布的代码,而不是作为到场外资源的链接。 -
可能使用
FocusListener和PropertyChangeListener,用于example。
标签: java swing validation focus