CellEditorListener 有“editingStopped”和“editingCancelled”。但是,我如何实现在单元格编辑会话开始时需要运行的一段代码呢?
一个典型的示例可能是,当您开始编辑时,您希望 JTextField 编辑器组件的文本进入 selectAll()。我很想认为要做的事情是重写 DefaultCellEditor 的方法之一,例如 getTableCellEditorComponent 或 getCellEditorValue 或 getComponent,但这些方法都没有明确表示它们是在编辑会话开始时调用的。
相反,我们知道如果我们正在编辑,JTable.getCellEditor 返回编辑器,如果没有,则返回 null。这是因为编辑开始时该组件被制作为 JTable 的子对象。它似乎也在编辑会话开始时获得焦点,因此您可能会考虑向编辑器组件(JTextField 等)添加 FocusListener。但这能保证吗?此外,焦点可能会在编辑会话期间丢失然后返回。
有一种方法可以侦听此编辑器组件的“添加”(作为子对象):ContainerListener。除非有人告诉我不同的情况,否则这似乎是接到编辑会话已经开始的电话的最直接、最合理的方式。但奇怪的是没有更直接的方法......
一个典型的示例可能是,当您开始编辑时,您希望 JTextField 编辑器组件的文本进入 selectAll()。
您可以覆盖editCellAt(...)
JTable 的方法在编辑开始后选择文本:
@Override
public boolean editCellAt(int row, int column, EventObject e)
{
boolean result = super.editCellAt(row, column, e);
final Component editor = getEditorComponent();
if (editor != null && editor instanceof JTextComponent)
{
((JTextComponent)editor).selectAll();
if (e == null)
{
((JTextComponent)editor).selectAll();
}
else if (e instanceof MouseEvent)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
((JTextComponent)editor).selectAll();
}
});
}
}
return result;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)