} @Override public Class<?> getColumnClass(int columnIndex) { // TODO Auto-generated method stub return String.class; } @Override public int getColumnCount() { // TODO Auto-generated method stub
return columnNames.length;
} @Override public String getColumnName(int columnIndex) { // TODO Auto-generated method stub
return columnNames[columnIndex]; } @Override public int getRowCount() { // TODO Auto-generated method stub return data.length; } @Override public Object getValueAt(int rowIndex, int columnIndex) { // TODO Auto-generated method stub return data[rowIndex][columnIndex]; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { // TODO Auto-generated method stub return true; } @Override public void setValueAt(Object value, int rowIndex, int columnIndex) { // TODO Auto-generated method stub
if (value instanceof String){ String s = (String)value; data[rowIndex][columnIndex] = s; } } public void addColumn(String columnName,String[] columnData){ if (columnData == null){ columnData = new String[data.length]; for(int i = 0 ; i < columnData.length;i++){ columnData[i] = ""; } } if (columnData.length < columnNames.length){ String[] newColumnData = Arrays.copyOf(columnData, columnData.length + 1); columnData = newColumnData; } String[] newColumnName = new String[columnNames.length + 1]; for(int i = 0;i < newColumnName.length;i++){ if (i == columnNames.length){ newColumnName[i] = columnName; }else{ newColumnName[i] = columnNames[i]; } }
this.columnNames = newColumnName;
String[][] newData = new String[data.length][data[0].length + 1]; for (int i = 0;i < newData.length;i++){ for(int j = 0 ; j < newData[0].length;j++){ if (j < data[0].length){ newData[i][j] = data[i][j]; }else{ if (columnData[i] == null) columnData[i] = ""; newData[i][j] = columnData[i]; } } }
this.data = newData; }
public void addColumn(String columnName){ this.addColumn(columnName, null); }
public void addRow(String[] rowData){ String[][] newData = new String[data.length + 1][data[0].length]; for (int i = 0; i < newData.length;i++){ for (int j = 0; j < newData[0].length ;j++){ if (i < data.length){ newData[i][j] = data[i][j]; }else{ if(rowData[j] == null) rowData[j] = ""; newData[i][j] = rowData[j]; } } } this.data = newData;
fireTableRowsInserted(0, data.length - 1); }
public void removeRow(int row){ if (row < 0 || row >= data.length) return; String[][] newData = new String[data.length - 1][data[0].length]; for (int i = 0; i < newData.length;i++){ for (int j = 0; j < newData[0].length;j++){ if (i < row){ newData[i][j] = data[i][j]; }else{ newData[i][j] = data[i + 1][j]; } } }
public void insertRow(int row,String[] rowData){ String[][] newData = new String[data.length + 1][data[0].length]; for (int i = 0 ; i < newData.length;i++){ for (int j = 0 ; j < newData[0].length;j++){ if (i == row){ if (rowData[j] == null) rowData[j] = ""; newData[i][j] = rowData[j]; }else if (i > row){ newData[i][j] = data[i - 1][j]; }else{ newData[i][j] = data[i][j]; } } } this.data = newData; fireTableRowsInserted(0, data.length - 1); }
public void setColumnIdentifiers(String[] columnIdentifiers){ for (int i = 0 ; i < columnIdentifiers.length;i++){ if (columnIdentifiers[i] == null) columnIdentifiers[i] = ""; } this.columnNames = columnIdentifiers; }
public void setDataVector(String[][] dataVector,String[] columnIdentifiers){
public int findColumn(String columnName){ for (int i = 0; i < columnNames.length;i++){ if (columnNames[i].equals(columnName)){ return i; } } return -1; }
public static void main(String...strings){ String[][] data = new String[][]{{"key1","USA","美国"},{"key2","Japan","日本"} ,{"key3","China","中国"}}; String[] columnNames = new String[]{"KEY","_en_US","_zh_CN"};
CustomizeTableModel tableModel = new CustomizeTableModel(data,columnNames);
//===================================================================================== for (int i = 0;i < tableModel.getColumnCount();i++){ System.out.print(tableModel.getColumnName(i) + "::"); } System.out.println(); System.out.println("--------------------");
for (int i = 0 ; i < tableModel.getRowCount();i++){ for (int j = 0; j < tableModel.getColumnCount();j++){ System.out.print(tableModel.getValueAt(i, j) + "::"); } System.out.println(); } } }执行fireTableRowsDeleted(row, row);报错
import java.util.Map;import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;public class CustomizeTableModel extends AbstractTableModel {
private String[][] data;
private String[] columnNames;
public CustomizeTableModel(String[][] data,String[] columnNames) {
super();
this.data = data;
this.columnNames = columnNames;
} @Override
public Class<?> getColumnClass(int columnIndex) {
// TODO Auto-generated method stub
return String.class;
} @Override
public int getColumnCount() {
// TODO Auto-generated method stub
return columnNames.length;
} @Override
public String getColumnName(int columnIndex) {
// TODO Auto-generated method stub
return columnNames[columnIndex];
} @Override
public int getRowCount() {
// TODO Auto-generated method stub
return data.length;
} @Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return data[rowIndex][columnIndex];
} @Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return true;
} @Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
if (value instanceof String){
String s = (String)value;
data[rowIndex][columnIndex] = s;
}
} public void addColumn(String columnName,String[] columnData){
if (columnData == null){
columnData = new String[data.length];
for(int i = 0 ; i < columnData.length;i++){
columnData[i] = "";
}
}
if (columnData.length < columnNames.length){
String[] newColumnData = Arrays.copyOf(columnData, columnData.length + 1);
columnData = newColumnData;
}
String[] newColumnName = new String[columnNames.length + 1];
for(int i = 0;i < newColumnName.length;i++){
if (i == columnNames.length){
newColumnName[i] = columnName;
}else{
newColumnName[i] = columnNames[i];
}
}
this.columnNames = newColumnName;
String[][] newData = new String[data.length][data[0].length + 1];
for (int i = 0;i < newData.length;i++){
for(int j = 0 ; j < newData[0].length;j++){
if (j < data[0].length){
newData[i][j] = data[i][j];
}else{
if (columnData[i] == null)
columnData[i] = "";
newData[i][j] = columnData[i];
}
}
}
this.data = newData;
}
public void addColumn(String columnName){
this.addColumn(columnName, null);
}
public void addRow(String[] rowData){
String[][] newData = new String[data.length + 1][data[0].length];
for (int i = 0; i < newData.length;i++){
for (int j = 0; j < newData[0].length ;j++){
if (i < data.length){
newData[i][j] = data[i][j];
}else{
if(rowData[j] == null)
rowData[j] = "";
newData[i][j] = rowData[j];
}
}
}
this.data = newData;
fireTableRowsInserted(0, data.length - 1);
}
public void removeRow(int row){
if (row < 0 || row >= data.length)
return;
String[][] newData = new String[data.length - 1][data[0].length];
for (int i = 0; i < newData.length;i++){
for (int j = 0; j < newData[0].length;j++){
if (i < row){
newData[i][j] = data[i][j];
}else{
newData[i][j] = data[i + 1][j];
}
}
}
this.data = newData;
System.out.println("====fireTableRowsDeleted======");
fireTableRowsDeleted(row, row);
}
public void insertRow(int row,String[] rowData){
String[][] newData = new String[data.length + 1][data[0].length];
for (int i = 0 ; i < newData.length;i++){
for (int j = 0 ; j < newData[0].length;j++){
if (i == row){
if (rowData[j] == null)
rowData[j] = "";
newData[i][j] = rowData[j];
}else if (i > row){
newData[i][j] = data[i - 1][j];
}else{
newData[i][j] = data[i][j];
}
}
}
this.data = newData;
fireTableRowsInserted(0, data.length - 1);
}
public void setColumnIdentifiers(String[] columnIdentifiers){
for (int i = 0 ; i < columnIdentifiers.length;i++){
if (columnIdentifiers[i] == null)
columnIdentifiers[i] = "";
}
this.columnNames = columnIdentifiers;
}
public void setDataVector(String[][] dataVector,String[] columnIdentifiers){
this.data = dataVector;
this.columnNames = columnIdentifiers;
}
public int findColumn(String columnName){
for (int i = 0; i < columnNames.length;i++){
if (columnNames[i].equals(columnName)){
return i;
}
}
return -1;
}
public static void main(String...strings){
String[][] data = new String[][]{{"key1","USA","美国"},{"key2","Japan","日本"}
,{"key3","China","中国"}};
String[] columnNames = new String[]{"KEY","_en_US","_zh_CN"};
CustomizeTableModel tableModel = new CustomizeTableModel(data,columnNames);
//=====================================================================================
for (int i = 0;i < tableModel.getColumnCount();i++){
System.out.print(tableModel.getColumnName(i) + "::");
}
System.out.println();
System.out.println("--------------------");
for (int i = 0 ; i < tableModel.getRowCount();i++){
for (int j = 0; j < tableModel.getColumnCount();j++){
System.out.print(tableModel.getValueAt(i, j) + "::");
}
System.out.println();
}
}
}执行fireTableRowsDeleted(row, row);报错
还有你的这段代码,究竟是想要做什么呢?fireXXX函数系是发送触发事件的信息的。例如,fireTableDataChanged会通知对应的table,model的数据发生了变化需要重新装载数据来刷新显示。
而这些,abstractTableModel都已经有了实现。你现在是想要做些什么呢?