JTableTest.java文件如下
import javax.swing.table.*;
import javax.swing.*;public class JTableTest {
    public void start() {
        TableModel1 model1 = new TableModel1();
        JTable table = new JTable(model1);
        table.setRowSelectionAllowed(false);
       JTableChageTest editor= new JTableChageTest();
        editor.createFrame();
        table.setDefaultEditor(Integer.class,editor);        JScrollPane sp = new JScrollPane(table);
         sp.setBounds(10,10,500,400);
        table.setRowSelectionAllowed(false);
        JFrame f = new JFrame("JTableTest");
        f.setLayout(null);        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(800, 600);
        f.add(sp);
        f.setVisible(true);    }    public static void main(String[] args) {
         JTableTest test=new JTableTest();
         test.start();
    }}
JTableChageTest.jav
import javax.swing.table.*;
import javax.swing.*;
import java.awt.*;
public class JTableChageTest extends AbstractCellEditor implements TableCellEditor {
    JScrollPane sp1;
    JScrollPane sp2;
    int count = 0;
    JFrame f = new JFrame();
    Object value;    public void createFrame() {
        TableModel1 model1 = new TableModel1();
        JTable table1 = new JTable(model1);
        table1.setRowSelectionAllowed(false);
        TableColumnModel tcm = table1.getColumnModel();        for (int i = 0; i < 5; i++) {
            TableColumn tc = tcm.getColumn(i);
            tc.setHeaderValue(null);
            tc.setMaxWidth(10);
            tc.setMinWidth(10);
            tc.setPreferredWidth(10);        }
        sp1 = new JScrollPane(table1);
        sp1.setBounds(10, 10, 400, 400);
        TableModel2 model2 = new TableModel2();
        JTable table2 = new JTable(model2);
        table1.setRowSelectionAllowed(false);
        TableColumnModel tcm2 = table2.getColumnModel();        for (int i = 0; i < 20; i++) {
            TableColumn tc = tcm2.getColumn(i);
            tc.setHeaderValue(null);
            tc.setMaxWidth(20);
            tc.setMinWidth(20);
            tc.setPreferredWidth(10);        }
        sp2 = new JScrollPane(table2);
        sp2.setBounds(10, 10, 400, 400);        Button button = new Button("change");
        button.setBounds(420, 100, 100, 30);        f.setLayout(null);
        f.setSize(800, 600);
        f.add(button);    }    public void start() {        if (count % 2 == 0) {
            f.getContentPane().remove(sp2);
            f.getContentPane().add(sp1);
        } else {
            f.getContentPane().remove(sp1);
            f.getContentPane().add(sp2);
        }
        count++;
        f.setVisible(true);
    }    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        start();
        this.value = value;
        return null;
    }    public Object getCellEditorValue() {
        return value;
    }
    public static void main(String[] args) {
        JTableChageTest test = new JTableChageTest();
        test.start();
    }}
class TableModel1 extends AbstractTableModel {
    public int getColumnCount() {
        return 5;
    }    public int getRowCount() {
        return 10;
    }    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }    public Object getValueAt(int rowIndex, int columnIndex) {
        int index = (rowIndex * 10 + columnIndex);        return new Integer(index);
    }    public boolean isCellEditable(int row, int col) {
        return true;
    }
}class TableModel2 extends AbstractTableModel {
    public int getColumnCount() {
        return 20;
    }    public int getRowCount() {
        return 20;
    }    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }
    public Object getValueAt(int rowIndex, int columnIndex) {
        int index = (rowIndex * 20 + columnIndex);        return new Boolean(index % 2 == 0);
    }
    public boolean isCellEditable(int row, int col) {
        return true;
    }
}运行JTableTest.java 出来一个jTable 表格,点击一个单元格1 ,出来一个Frame然后关闭这个frame,再点任意的一个单元格,发现这次弹出的frame,Jtable 会从上次的页面闪一下,然后才正确显示内容。怎么解决。
 如果把类似f.getContentPane().remove(sp2);      f.getContentPane().add(sp1);  改成f.setContentPane(sp1);,    f.getContentPane().remove(sp1);
            f.getContentPane().add(sp2);改成成f.setContentPane(sp2),显示不会出现闪烁,但是这样不能保留那个button按钮,而我需要保留那个button按钮。