加上MouseListener,再editCell试试,方法名记不清了,你查查看

解决方案 »

  1.   

    看看DefaultCellEditor类的源代码在继承这个类的时候,需要实现一个方法:
    ********************************************************************************
         *
         * Specifies the number of clicks needed to start editing.
    ********************************************************************************
         * @param count  an int specifying the number of clicks needed to start editing
         * @see #getClickCountToStart
         */
        public void setClickCountToStart(int count) {
    clickCountToStart = count;
        }
    你只要实现new DefaultCellEditor(new JTextField()).setClickCountToStart(1)就行了,1就是click 1次。
    下面是这个类的源代码
    ****************************************************************************************
    /*
     * @(#)DefaultCellEditor.java 1.38 00/02/02
     *
     * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
     * 
     * This software is the proprietary information of Sun Microsystems, Inc.  
     * Use is subject to license terms.
     * 
     */package javax.swing;import java.awt.Component;
    import java.awt.event.*;
    import java.awt.AWTEvent;
    import java.lang.Boolean;
    import javax.swing.table.*;
    import javax.swing.event.*;
    import java.util.EventObject;
    import javax.swing.tree.*;
    import java.io.Serializable;/**
     * The default editor for table and tree cells.
     * <p>
     * <strong>Warning:</strong>
     * Serialized objects of this class will not be compatible with 
     * future Swing releases.  The current serialization support is appropriate
     * for short term storage or RMI between applications running the same
     * version of Swing.  A future release of Swing will provide support for
     * long term persistence.
     *
     * @version 1.38 02/02/00
     * @author Alan Chung
     * @author Philip Milne
     */public class DefaultCellEditor extends AbstractCellEditor 
        implements TableCellEditor, TreeCellEditor { //
    //  Instance Variables
    //    protected JComponent editorComponent;
        protected EditorDelegate delegate;
        protected int clickCountToStart = 1;//
    //  Constructors
    //    /**
         * Constructs a DefaultCellEditor that uses a text field.
         *
         * @param x  a JTextField object ...
         */
        public DefaultCellEditor(final JTextField textField) {
            editorComponent = textField;
    this.clickCountToStart = 2;
            delegate = new EditorDelegate() {
                public void setValue(Object value) {
    textField.setText((value != null) ? value.toString() : "");
                }     public Object getCellEditorValue() {
    return textField.getText();
        }
            };
    textField.addActionListener(delegate);
        }    /**
         * Constructs a DefaultCellEditor object that uses a check box.
         *
         * @param x  a JCheckBox object ...
         */
        public DefaultCellEditor(final JCheckBox checkBox) {
            editorComponent = checkBox;
            delegate = new EditorDelegate() {
                public void setValue(Object value) { 
                 boolean selected = false; 
    if (value instanceof Boolean) {
        selected = ((Boolean)value).booleanValue();
    }
    else if (value instanceof String) {
        selected = value.equals("true");
    }
    checkBox.setSelected(selected);
                }     public Object getCellEditorValue() {
    return new Boolean(checkBox.isSelected());
        }
            };
    checkBox.addActionListener(delegate);
        }    /**
         * Constructs a DefaultCellEditor object that uses a combo box.
         *
         * @param x  a JComboBox object ...
         */
        public DefaultCellEditor(final JComboBox comboBox) {
            editorComponent = comboBox;
    comboBox.putClientProperty("JComboBox.lightweightKeyboardNavigation", "Lightweight");
            delegate = new EditorDelegate() {
                public void setValue(Object value) {
    comboBox.setSelectedItem(value);
                }     public Object getCellEditorValue() {
    return comboBox.getSelectedItem();
        }
                    
                public boolean shouldSelectCell(EventObject anEvent) { 
                    if (anEvent instanceof MouseEvent) { 
                        MouseEvent e = (MouseEvent)anEvent;
                        return e.getID() != MouseEvent.MOUSE_DRAGGED;
                    }
                    return true;
                }
            };
    comboBox.addActionListener(delegate);
        }    /**
         * Returns the a reference to the editor component.
         *
         * @return the editor Component
         */
        public Component getComponent() {
    return editorComponent;
        }//
    //  Modifying
    //    /**
         * Specifies the number of clicks needed to start editing.
         *
         * @param count  an int specifying the number of clicks needed to start editing
         * @see #getClickCountToStart
         */
        public void setClickCountToStart(int count) {
    clickCountToStart = count;
        }    /**
         *  ClickCountToStart controls the number of clicks required to start
         *  editing.
         */
        public int getClickCountToStart() {
    return clickCountToStart;
        }//
    //  Override the implementations of the superclass, forwarding all methods 
    //  from the CellEditor interface to our delegate. 
    //    public Object getCellEditorValue() {
            return delegate.getCellEditorValue();
        }    public boolean isCellEditable(EventObject anEvent) { 
    return delegate.isCellEditable(anEvent); 
        }
        
        public boolean shouldSelectCell(EventObject anEvent) { 
    return delegate.shouldSelectCell(anEvent); 
        }    public boolean stopCellEditing() {
    return delegate.stopCellEditing();
        }    public void cancelCellEditing() {
    delegate.cancelCellEditing();
        }//
    //  Implementing the TreeCellEditor Interface
    //    public Component getTreeCellEditorComponent(JTree tree, Object value,
    boolean isSelected,
    boolean expanded,
    boolean leaf, int row) {
    String         stringValue = tree.convertValueToText(value, isSelected,
        expanded, leaf, row, false); delegate.setValue(stringValue);
    return editorComponent;
        }//
    //  Implementing the CellEditor Interface
    //    public Component getTableCellEditorComponent(JTable table, Object value,
     boolean isSelected,
     int row, int column) {
            delegate.setValue(value);
    return editorComponent;
        }
    //
    //  Protected EditorDelegate class
    //    protected class EditorDelegate implements ActionListener, ItemListener, Serializable {        protected Object value;        public Object getCellEditorValue() {
                return value;
            }     public void setValue(Object value) { 
        this.value = value; 
    }        public boolean isCellEditable(EventObject anEvent) {
        if (anEvent instanceof MouseEvent) { 
    return ((MouseEvent)anEvent).getClickCount() >= clickCountToStart;
        }
        return true;
    }
        
            public boolean shouldSelectCell(EventObject anEvent) { 
                return true; 
            }        public boolean startCellEditing(EventObject anEvent) {
        return true;
    }        public boolean stopCellEditing() { 
        fireEditingStopped(); 
        return true;
    }       public void cancelCellEditing() { 
       fireEditingCanceled(); 
           }        public void actionPerformed(ActionEvent e) {
                DefaultCellEditor.this.stopCellEditing();
    }        public void itemStateChanged(ItemEvent e) {
        DefaultCellEditor.this.stopCellEditing();
    }
        }} // End of class JCellEditor