【发布时间】:2019-06-08 01:10:09
【问题描述】:
在我的代码中,我有一些 JTextField 以及一个带有多列和多行的单独 JTable。我想验证表格中的特定单元格,如果它无效,则不允许用户将光标移动到另一个字段。如果用户将光标移动到表中的不同单元格(不同的行或列),我的代码可以正常工作,但是如果我将光标移动到表单上的不同字段,则光标会移动。我已经验证我的 stopCellEditing 函数被调用并返回 false。当它无效时,我将边框变为红色。这是正常工作,正如预期的那样,只是光标在移动。 这是我的代码。
用于受影响列的单元格编辑器设置使用
// Set up the verifier to make sure the user has entered a valid value
statusTable.getColumn(statusTable.getColumnName(1)).
setCellEditor(new CellEditor(new SvidVerifier(), this));
而我的扩展 DefaultCellEditor 是
class CellEditor extends DefaultCellEditor {
InputVerifier verifier = null;
ModView view = null;
public CellEditor(InputVerifier verifier, ModView view) {
super(new JTextField());
this.verifier = verifier;
this.view = view;
}
@Override
public boolean stopCellEditing() {
if (KeyboardFocusManager.getCurrentKeyboardFocusManager().
getFocusOwner() == view.publicBrowseButton) {
super.cancelCellEditing();
return true;
}
boolean canStop = verifier.verify(editorComponent) &&
super.stopCellEditing();
return canStop;
}
}
我的验证者是
class IdVerifier extends InputVerifier {
@Override
public boolean verify(JComponent input) {
JTextField tf = (JTextField) input;
try {
if ((Integer.parseInt(tf.getText()) >= 1) &&
(Integer.parseInt(tf.getText()) <= 32)) {
tf.setBorder(new LineBorder(
UIManager.getColor("activeCaptionBorder")));
return true;
} else {
tf.setBorder(new LineBorder(Color.RED));
return false;
}
} catch (Exception ex) {
tf.setBorder(new LineBorder(Color.RED));
return false;
}
}
}
感谢您的帮助。
【问题讨论】:
-
查看:stackoverflow.com/questions/20390445/… 示例编辑器,它强制您输入“5 个字符”的字符串。您应该能够自定义工作示例以满足您的编辑要求。
-
@camickr 这正是我需要做的事情。简单有效。谢谢。
标签: java swing jtable jtextfield