当前位置: 首页 > 面试题库 >

如何在cellchange上进行JTable选择所有文本

程凯定
2023-03-14
问题内容

我已经看到了一些这样做的例子,但我仍然不明白,也无法实现。

我想做的是在单元格更改(焦点)上,下一个选定的单元格将选择所有文本,以供用户完全更改它。

关于如何做的任何想法?

// update //不知何故我设法完成了以下课程,但

实现此
tblLayers.setDefaultEditor(String.class,new Classes.CellEditor());

不会产生任何结果,即“尚不支持”。不抛出..

我应该如何解决这个问题?

import java.awt.Component;
import java.util.EventObject;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.CellEditorListener;
import javax.swing.table.TableCellEditor;


public class CellEditor extends JTextField implements TableCellEditor {


public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    //        final JTextField ec = (JTextField) editorComponent;
    //
    //        ec.setText((String) value);
    //
    //        // selectAll, so that whatever the user types replaces what we just put there
    //        ec.selectAll();
    //
    //        SwingUtilities.invokeLater(new Runnable() {
    //
    //            public void run() {
    //                // make the component take the keyboard focus, so the backspace key works
    //                ec.requestFocus();
    //
    //                SwingUtilities.invokeLater(new Runnable() {
    //
    //                    public void run() {
    //                        // at this point the user has typed something into the cell and we
    //                        // want the caret to be AFTER that character, so that the next one
    //                        // comes in on the RHS
    //                        ec.setCaretPosition(ec.getText().length());
    //                    }
    //                });
    //            }
    //        });
    //        return editorComponent;


    throw new UnsupportedOperationException("Not supported yet.");
}

public Object getCellEditorValue() {
    throw new UnsupportedOperationException("Not supported yet.");
}

public boolean isCellEditable(EventObject anEvent) {
    throw new UnsupportedOperationException("Not supported yet.");
}

public boolean shouldSelectCell(EventObject anEvent) {
    throw new UnsupportedOperationException("Not supported yet.");
}

public boolean stopCellEditing() {
    throw new UnsupportedOperationException("Not supported yet.");
}

public void cancelCellEditing() {
    throw new UnsupportedOperationException("Not supported yet.");
}

public void addCellEditorListener(CellEditorListener l) {
    throw new UnsupportedOperationException("Not supported yet.");
}

public void removeCellEditorListener(CellEditorListener l) {
    throw new UnsupportedOperationException("Not supported yet.");
}
}

问题答案:

关于editorComponent,我该在哪里初始化此变量?

变量editorComponent是的字段DefaultCellEditor

代替

class CellEditor extends JTextField implements TableCellEditor

考虑

class CellEditor extends DefaultCellEditor

然后,您可以执行以下操作:

@Override
public Component getTableCellEditorComponent(JTable table,
        Object value, boolean isSelected, int row, int column) {
    JTextField ec = (JTextField) editorComponent;
    if (isSelected) {
        ec.selectAll();
    }
    return editorComponent;
}

附录:如@
Edoz所建议,并在此完整示例中进行了说明,您可以selectAll()在鼠标单击启动编辑时有选择地重新排队。

JTable table = new JTable(model) {

    @Override // Always selectAll()
    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)) {
            return result;
        }
        if (e instanceof MouseEvent) {
            EventQueue.invokeLater(() -> {
                ((JTextComponent) editor).selectAll();
            });
        } else {
            ((JTextComponent) editor).selectAll();
        }
        return result;
    }
};


 类似资料:
  • 问题内容: 我想让可编辑JTables中的编辑器在开始编辑时选择单元格中的所有文本。我已经尝试了几件事,都是围绕从TableCellEditor.getTableCellEditorComponent方法返回的组件上调用JTextComponent.selectAll()进行的。我尝试过的所有方法均无济于事。 在最近的尝试中,我从Swing教程更改了SimpleTableDemo类,以使用自定义T

  • 问题内容: 在将此标记为重复之前,我希望您认识到,实际上没有人为这个特定问题提供好的答案。在焦点/单击时选择contenteditable div中的所有文本时,接受的答案和TimDown的答案都无济于事,因为它们仅在元素已被聚焦时才起作用。就我而言,我希望单击一个按钮后即可选择contenteditablediv中的所有文本,即使该div事先未聚焦。 我该怎么办? 问题答案: 我使用了该线程中的

  • 在visual studio中编译项目时,我会自动运行一个模糊处理程序。迷惑的。dll文件以相同的文件名保存,但保存在子文件夹中。 文件夹结构 问题:我能确保Inno Setup编译<code>FileA吗。dll,而不是,如果“安全”是否存在?

  • 要组织和排列您的图稿,请使用工具以便精确地选择、放置和堆叠对象。您可以测量和对齐对象;编组对象以便能够将其视为一个单元进行操作;有选择地隔离、锁定或隐藏对象。 选区选项和首选项 用于选择对象的选项 在可以修改某个对象之前,需要将其与周围的对象区分开来。只需选择对象,即可加以区分。只要选择了对象或者对象的一部分,即可对其进行编辑。 Illustrator 提供以下选择方法和工具: 隔离模式 可让您快

  • 问题内容: 我目前正在使用JTable来显示数据库中的内容。我想为用户提供便利,以便他可以使用Shift +箭头键选择想要的行数,然后稍后使用提供的删除选项删除那些记录。请提供一个小例子。 问题答案: 您需要允许多项选择: 然后,您需要编写适当的选择侦听器。这有点困难,请尝试在Google相关解决方案中查找。您可以看一个选择侦听器的示例。

  • 我试图改变JTable的选择行为,使其能够在不使用CTRL修饰符的情况下向选择添加和移除行。方法: 似乎正是我所要寻找的,尤其是这种情况: 是我想做的。问题是我做不到。也许我遗漏了一些关于内部JTable工作的信息,但下面是我的代码: 这似乎是在不务正业。有谁能告诉我问题出在哪里吗? 多谢了。