[英]Setting StopCellEditing in JTable Cell Doesn't Stop Editing When Clicking in JTextField
在我的代码中,我有一些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;
}
}
}
谢谢您的帮助。
如我所见,该表被告知停止编辑,仅此而已。 CellEditor界面未提及stopCellEditing的焦点处理。
您可能必须将焦点侦听器绑定到窗体上的其他组件,然后在该侦听器中,验证先前的焦点是否在表上。 如果是这样,并且表格仍在编辑中,请将焦点重新设置到表格上。
使用@camickr指出的文章,我可以使用TextField.requestFocusInWindow()
函数成功完成所需的工作并解决我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.