class Table extends JTable {
DefaultTableModel model; //使用DefaultTabelModel模型
Vector row_vector=new Vector();//数据库中使用
Vector column_vector;
public Table(){
String[] Column_Names={"a","b","删除",};
column_vector=new Vector();
column_vector.addElement(Column_Names[0]);
column_vector.addElement(Column_Names[1]);
column_vector.addElement(Column_Names[2]);
all_Rows();
model=new DefaultTableModel(row_vector,column_vector);
setModel(model);
getColumn("删除").setCellEditor(new ButtonEditor(new JCheckBox()));
}
public void all_Rows()
{
/*
读取数据库所有数据
*/
}
public void remove_Row(String id,int row,int col){
JButton button=new JButton(); //使用于子类
delete(id);
int max= getRowCount();
model.removeRow(row);
model.setRowCount(max-1);
model.fireTableDataChanged();
}
}
public void delete(String id)
{
/*删除数据库指定id数据*/
}
//使用内部类
class ButtonEditor
extends DefaultCellEditor
{
protected JButton button; //使用于子类
private String label; //仅使用于本类
private boolean isPushed;
String Id;
//构造函数
public ButtonEditor(JCheckBox checkBox)
{
super(checkBox);
button=new JButton();
button.setOpaque(true);
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
stopCellEditing();
}
});
}
public Component getTableCellEditorComponent(JTable table,Object value,
boolean isSelected,int row,int column)
{
Id=table.getValueAt(row,0).toString();
if(column==2)
{
label=(value==null)?"删除":value.toString();
button.setText(label);
remove_Row(Id,row,column);
}
return button;
}
public Object getCellEditorValue()
{
isPushed=false;
return null;
}
public boolean stopCellEditing()
{
isPushed=false;
return super.stopCellEditing();
}
protected void fireEditingStopped()
{
super.fireEditingStopped();
}
}
}
为何我点击删除行的时候只要不是最后一行。。都可以。。只要点击最后一行的删除就报
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 30 >= 30 at java.util.Vector.elementAt(Vector.java:432) at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:637) at javax.swing.JTable.setValueAt(JTable.java:1875) at javax.swing.JTable.editingStopped(JTable.java:3333)
这个错误呢?
谢谢亚
DefaultTableModel model; //使用DefaultTabelModel模型
Vector row_vector=new Vector();//数据库中使用
Vector column_vector;
public Table(){
String[] Column_Names={"a","b","删除",};
column_vector=new Vector();
column_vector.addElement(Column_Names[0]);
column_vector.addElement(Column_Names[1]);
column_vector.addElement(Column_Names[2]);
all_Rows();
model=new DefaultTableModel(row_vector,column_vector);
setModel(model);
getColumn("删除").setCellEditor(new ButtonEditor(new JCheckBox()));
}
public void all_Rows()
{
/*
读取数据库所有数据
*/
}
public void remove_Row(String id,int row,int col){
JButton button=new JButton(); //使用于子类
delete(id);
int max= getRowCount();
model.removeRow(row);
model.setRowCount(max-1);
model.fireTableDataChanged();
}
}
public void delete(String id)
{
/*删除数据库指定id数据*/
}
//使用内部类
class ButtonEditor
extends DefaultCellEditor
{
protected JButton button; //使用于子类
private String label; //仅使用于本类
private boolean isPushed;
String Id;
//构造函数
public ButtonEditor(JCheckBox checkBox)
{
super(checkBox);
button=new JButton();
button.setOpaque(true);
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
stopCellEditing();
}
});
}
public Component getTableCellEditorComponent(JTable table,Object value,
boolean isSelected,int row,int column)
{
Id=table.getValueAt(row,0).toString();
if(column==2)
{
label=(value==null)?"删除":value.toString();
button.setText(label);
remove_Row(Id,row,column);
}
return button;
}
public Object getCellEditorValue()
{
isPushed=false;
return null;
}
public boolean stopCellEditing()
{
isPushed=false;
return super.stopCellEditing();
}
protected void fireEditingStopped()
{
super.fireEditingStopped();
}
}
}
为何我点击删除行的时候只要不是最后一行。。都可以。。只要点击最后一行的删除就报
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 30 >= 30 at java.util.Vector.elementAt(Vector.java:432) at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:637) at javax.swing.JTable.setValueAt(JTable.java:1875) at javax.swing.JTable.editingStopped(JTable.java:3333)
这个错误呢?
谢谢亚
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货