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按钮。
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按钮。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货