【发布时间】:2014-07-31 21:09:36
【问题描述】:
我有一个 JTable,它的单元格编辑器是 JSpinners。我正在使用自定义单元格编辑器类来完成此操作。我的 JPanel 中还有一些其他组件。当用户正在编辑其中一个单元格(即 JSpinner 具有焦点)然后与其他组件之一交互而没有先按 enter 或失去焦点时,就会出现我的问题。我希望 JSpinner 在运行与其他组件关联的代码之前立即失去焦点并提交更改,但 JSpinner 只是保留其焦点。
理想情况下,我希望 JSpinner 在用户单击 JSpinner 内部以外的任何位置时立即失去焦点。这是我的自定义编辑器类:
public class PhyMappingTableCellEditor extends AbstractCellEditor implements TableCellEditor {
final JSpinner spinner = new JSpinner();
public PhyMappingTableCellEditor(ArrayList<String> phys) {
spinner.setModel(new SpinnerListModel(phys));
spinner.setBorder(new EmptyBorder(0,0,0,0));
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
int row, int column) {
spinner.setValue(value);
return spinner;
}
@Override
public Object getCellEditorValue() {
return spinner.getValue();
}
}
提前致谢!
【问题讨论】:
-
考虑提供一个可运行的示例,该示例启动了您的问题。我发现调用stopCellEditing时,需要调用commitEdit来确保值在调用getCellEditorValue之前被spinner验证过
标签: java swing jtable focus jspinner