Java 键入时是否可以清除JTable中的文本?

Java 键入时是否可以清除JTable中的文本?,java,swing,jtable,textfield,tablecelleditor,Java,Swing,Jtable,Textfield,Tablecelleditor,我可以让JTable中的文本字段像Excel中的单元格一样工作吗? 键入时清除文本,但进入单元格时可以进行编辑 我认为这两个操作将用于同一事件。我错了吗 我尝试使用按下的键,但没有任何效果。TT-TT 这是我的密码 private JTable getTblMaster() { if (tblMasterData == null) { tblMasterData = new JTable() { private static final long

我可以让
JTable
中的文本字段像Excel中的单元格一样工作吗? 键入时清除文本,但进入单元格时可以进行编辑

我认为这两个操作将用于同一事件。我错了吗

我尝试使用按下的
键,但没有任何效果。TT-TT

这是我的密码

private JTable getTblMaster() {
    if (tblMasterData == null) {
        tblMasterData = new JTable() {

            private static final long serialVersionUID = 1L;

            public TableCellEditor getCellEditor(int row, int column) {

                TableColumn tableColumn = getColumnModel()
                        .getColumn(column);

                TableCellEditor editor = tableColumn.getCellEditor();
                try {
                    if (editor == null) {
                            final JTextField text = new JTextField();
                            /*
                            text.addKeyListener(new java.awt.event.KeyAdapter() {
                                public void keyPressed(KeyEvent e){

                                }
                            });

                            SwingUtilities.invokeLater(new Runnable(){
                               public void run(){

                               }
                            });
                            */  
                            editor = new DefaultCellEditor(text);
                        ;
                        return editor;
                    }
                } catch (Exception e) {
                    LogWriter.error(e);
                }
                return editor;
            }
        };
    }
    return tblMasterData;
}

有什么建议吗

最好选择JTable单元格中的所有文本

text.setText(text.getText())
text.selectAll
通过包装到
invokeLater()

@camickr的出色解决方案

哦!垃圾神。救了我的命:D

我所需要的只是下面的代码,它可以工作。多容易啊!多谢各位

private JTable getTblMaster() {
    if (tblMasterData == null) {
        tblMasterData = new JTable() {
           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 KeyEvent) {
                    ((JTextComponent) editor).selectAll();
                }
                return result;
            }    ....

我是这样做的。首先,我使用事件键released,然后获取我正在处理的行和列编号,然后在该行设置值。代码是这样的

private void purchases_TBLKeyReleased(java.awt.event.KeyEvent evt) {                                          
    int rowWorking = purchases_TBL.getSelectedRow();
    int columnWorking = purchases_TBL.getSelectedColumn();

    if(columnWorking==3){
        model.setValueAt(null, rowWorking, columnWorking);
    }
} 
这会使表的第三列在我使用键盘时立即变为空


注意:同一段代码可以放在鼠标点击事件中。

谢谢您的回复,很抱歉没有这么多描述,但我不想在进入该单元格时包装文本。我只想在键入数据时替换数据(尚未进入单元格),但不想更改双击或按F2键时的行为(仍然有以前的数据,但没有将该文本换行)。在这种情况下,换行意味着作为
Runnable
调用,而不是中断文本。见此相关报道。