我曾经遇到一个表格问题,即当用户编辑单元格时,如果用户没有按下Enter或Tab键,该单元格不会存储其新值,而我希望在失去焦点时立即提交该值,因为我发现在编辑单元格时选择“文件 -> 保存”会导致该单元格的数据丢失。我发现您可以简单地设置,这对于除选择文件菜单之外的每次焦点更改都有效,但在选择文件菜单时,单元格仍处于编辑模式。我的问题是,设置此属性是否不能像人们期望的那样运行,还是默认情况下Java中的菜单项焦点工作方式不同?
if (table.isEditing())
table.getCellEditor().stopCellEditing();
initFocusability()
函数,该函数又调用了setFocusable(false)
函数。来自JMenu.JMenu#initFocusability的Java Doc。初始化
JMenuItem
的可聚焦性。JMenuItem
是可聚焦的,但子类可能希望是,这为它们提供了功能, 并调用其他内容或不调用任何内容。 有关此内容的动机,请参阅{@link javax.swing.JMenu#initFocusability}。
所以听起来你需要调用setFocusable(true);
。
getTableCellEditorComponent
方法的DefaultCellEditor
,该方法添加了一个焦点监听器以停止编辑:table.setDefaultEditor(String.class, new DefaultCellEditor(new JTextField()){
@Override
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected,
int row, int column)
{
Component c = super.getTableCellEditorComponent(table, value, isSelected, row, column);
c.addFocusListener(new FocusListener()
{
public void focusGained(FocusEvent e)
{
}
public void focusLost(FocusEvent e)
{
stopCellEditing();
}
});
return c;
}
});