gpt4 book ai didi

java - 如何为 DefaultCellEditor 模拟 "onStartCellEditing"

转载 作者:行者123 更新时间:2023-11-29 04:57:57 25 4
gpt4 key购买 nike

CellEditorListener 有“editingStopped”和“editingCancelled”。但是我该如何实现一段需要在单元格编辑 session 开始时运行的代码呢?

一个典型的例子可能是您希望 JTextField 编辑器组件的文本在您开始编辑时转到 selectAll()。我很想认为要做的事情是覆盖 DefaultCellEditor 的方法之一,例如 getTableCellEditorComponent 或 getCellEditorValue 或 getComponent,但这些方法都没有明确说明它们在编辑 session 开始时被调用。

相反,如果我们正在编辑,我们确实知道 JTable.getCellEditor 返回编辑器,但如果不是,则返回 null。这是因为在编辑开始时组件被做成了JTable 的子对象。它还似乎在编辑 session 开始时获得焦点,因此您可能会考虑将 FocusListener 添加到编辑器组件(JTextField 等)。但这有保证吗?此外,也许焦点可能会丢失,然后在编辑 session 期间返回。

有一种方法可以监听此编辑器组件的“添加”(作为子对象):ContainerListener。除非有人告诉我不同​​的说法,否则这似乎是接到电话通知编辑 session 已经开始的最直接、最合理的方式。但奇怪的是没有更直接的方法......

最佳答案

A typical example might be where you want the text of a JTextField editor component to go selectAll() when you start editing.

您可以覆盖 JTable 的 editCellAt(...) 方法以在编辑开始后选择文本:

@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;
}

关于java - 如何为 DefaultCellEditor 模拟 "onStartCellEditing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33067595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com