根据javatotourial,我们作了一个测试的编辑器
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableCellEditor;
public class AbstractTextTableCellEditor extends AbstractCellEditor
implements TableCellEditor
{
    JTextField txt = new JTextField();
    String str= null;
    public Object getCellEditorValue() {
       
        return str;
    }    public Component getTableCellEditorComponent(JTable table,
                                                 Object value,
                                                 boolean isSelected,
                                                 int row,
                                                 int column) {
        
         
        if(value!=null)
        {
            txt.setText(value.toString());
        }
        str = (String)value;
        return txt;
    }
}大家如果测试可以用这个表格package test.swing.table;import java.awt.BorderLayout;
import java.awt.Container;
import java.util.Set;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerEditor;
import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerField;
import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerTableCellEditor;
import com.huawei.etl.client.metaserver.plan.test.IntTableCellEditor;
import com.huawei.etl.meta.model.oci.OciExtractParallelRule;
import com.huawei.etl.util.swing.JTableUtils;public class TestTable
{    JTable table = null;
    public TestTable()
    {
        table = new JTable(new TestTableModel(buildTableHeader()));
        table.setDefaultEditor(Integer.class, new IntegerTableCellEditor(
            new IntegerField(0, 500)));
        //我将编辑器装在第3列
        table.getColumnModel().getColumn(3).setCellEditor(
            new AbstractTextTableCellEditor());
        JScrollPane sp = new JScrollPane(table);
        JFrame f = new JFrame("表");
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        Container con = f.getContentPane();
        con.setLayout(new BorderLayout());
        con.add(sp, BorderLayout.CENTER);
        f.setSize(300, 300);
        f.setLocationRelativeTo(null);
        f.pack();
        f.setVisible(true);
    }
    private Object[] buildTableHeader()
    {
        Object[] tableHeader = new Object[] { "序号", "比例因子%", "整数编辑器", "规则" };
        return tableHeader;
    }
    public static void main(String[] args)
    {
        TestTable tt = new TestTable();
    }}
class TestTableModel extends DefaultTableModel
{
    Object[][] content = new Object[500][4];    Object[] header = null;
    public TestTableModel(Object[] tableHeader)
    {
        this.header = tableHeader;
    }    public int getColumnCount()
    {
        return this.header.length;
    }
    public int getRowCount()
    {
        if (null == this.content)
        {
            return 0;
        }
        else
        {
            return this.content.length;
        }
    }
    public Object getValueAt(int row, int col)
    {
        return this.content[row][col];
    }
    public String getColumnName(int col)
    {
        return this.header[col].toString();
    }
    public boolean isCellEditable(int rowIndex, int columnIndex)
    {
        if (columnIndex > 0)
        {
            return true;
        }
        return false;
    }
    public void setValueAt(Object value, int row, int col)
    {
        this.content[row][col] = value;
        this.fireTableCellUpdated(row, col);
    }
    public Class getColumnClass(int columnIndex)
    {
        if (null == content[0][columnIndex])
        {
            if (columnIndex == 1)
            {
                return Integer.class;
            }
            else
            {
                return String.class;
            }
        }
        else
        {
            return content[0][columnIndex].getClass();
        }
    }
}各位大虾也可以自己作一个表格,然后安装好我的那个编辑器我将编辑器装在第3列,但是在编辑表格的时候出现一个问题:
就是当我输入(任意)字符串后都会在另外一个cell重复显示什么意思?比方你在第一个cell(当然是在第3列)
输入"abc"
当你点击该列的其他cell时,都会显示"abc"
我的编辑器根本就没有static变量,真不知道它是怎么保存下这个值,归根结底,还是对
表格编辑的机制不清晰
另外我没有安装绘制器,所以就是默认的,但是这应该只是一个编辑器,
不安装对应的绘制器应该没有关系

解决方案 »

  1.   

    对不起,测试类请用这个,先前有一句代码不能编译
    package test.swing.table;import java.awt.BorderLayout;
    import java.awt.Container;
    import java.util.Set;import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.WindowConstants;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableColumn;
    import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerEditor;
    import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerField;
    import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerTableCellEditor;
    import com.huawei.etl.client.metaserver.plan.test.IntTableCellEditor;
    import com.huawei.etl.meta.model.oci.OciExtractParallelRule;
    import com.huawei.etl.util.swing.JTableUtils;
    public class TestTable
    {    JTable table = null;
        public TestTable()
        {
            table = new JTable(new TestTableModel(buildTableHeader()));        //我将编辑器装在第3列
            table.getColumnModel().getColumn(3).setCellEditor(
                new AbstractTextTableCellEditor());
            JScrollPane sp = new JScrollPane(table);
            JFrame f = new JFrame("表");
            f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            Container con = f.getContentPane();
            con.setLayout(new BorderLayout());
            con.add(sp, BorderLayout.CENTER);
            f.setSize(300, 300);
            f.setLocationRelativeTo(null);
            f.pack();
            f.setVisible(true);
        }
        private Object[] buildTableHeader()
        {
            Object[] tableHeader = new Object[] { "序号", "比例因子%", "整数编辑器", "规则" };
            return tableHeader;
        }
        public static void main(String[] args)
        {
            TestTable tt = new TestTable();
        }}
    class TestTableModel extends DefaultTableModel
    {
        Object[][] content = new Object[500][4];    Object[] header = null;
        public TestTableModel(Object[] tableHeader)
        {
            this.header = tableHeader;
        }    public int getColumnCount()
        {
            return this.header.length;
        }
        public int getRowCount()
        {
            if (null == this.content)
            {
                return 0;
            }
            else
            {
                return this.content.length;
            }
        }
        public Object getValueAt(int row, int col)
        {
            return this.content[row][col];
        }
        public String getColumnName(int col)
        {
            return this.header[col].toString();
        }
        public boolean isCellEditable(int rowIndex, int columnIndex)
        {
            if (columnIndex > 0)
            {
                return true;
            }
            return false;
        }
        public void setValueAt(Object value, int row, int col)
        {
            this.content[row][col] = value;
            this.fireTableCellUpdated(row, col);
        }
        public Class getColumnClass(int columnIndex)
        {
            if (null == content[0][columnIndex])
            {
                if (columnIndex == 1)
                {
                    return Integer.class;
                }
                else
                {
                    return String.class;
                }
            }
            else
            {
                return content[0][columnIndex].getClass();
            }
        }
    }
      

  2.   

    http://www.finereport.com 早就可以了.
      

  3.   

    没有AbstractTextTableCellEditor,无法调试