您的位置:首页 > 编程语言 > Java开发

java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 21

2017-04-20 23:20 609 查看
报错原因:

请看73行备注

java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 21

 at java.util.Vector.get(Unknown Source)

 at e21_07.MfixedColumnTable$FloatingColumnTableModel.getColumnName(MfixedColumnTable.java:86)

 at javax.swing.JTable.addColumn(Unknown Source)

 at javax.swing.JTable.createDefaultColumnsFromModel(Unknown Source)

 at javax.swing.JTable.tableChanged(Unknown Source)

 at javax.swing.JTable.setModel(Unknown Source)

 at javax.swing.JTable.<init>(Unknown Source)

 at javax.swing.JTable.<init>(Unknown Source)

 at e21_07.MfixedColumnTable.<init>(MfixedColumnTable.java:34)

 at e21_07.ExampleFrame_07.<init>(ExampleFrame_07.java:39)

 at e21_07.ExampleFrame_07.main(ExampleFrame_07.java:13)

package e21_07;
import java.awt.*;
import java.util.*;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class MfixedColumnTable extends JPanel {
private static final long serialVersionUID=1L;
private JTable fixedColumnTable;
private FixedColumnTableModel fixedColumnTableModel;
private JTable floatingColumnTable;
private FloatingColumnTableModel floatingColumnTableModel;
private Vector<String> columnNameV;
private Vector<Vector<Object>> tableValueV;
private int fixedColumn=1;

public MfixedColumnTable(Vector<String> columnNameV,
Vector<Vector<Object>>tableValueV,int fixedColumn){
super();
setLayout(new BorderLayout());
this.columnNameV=columnNameV;
this.tableValueV=tableValueV;
this.fixedColumn=fixedColumn;
fixedColumnTableModel=new FixedColumnTableModel();
fixedColumnTable=new JTable(fixedColumnTableModel);
ListSelectionModel fixed=fixedColumnTable.getSelectionModel();
fixed.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
fixed.addListSelectionListener(new MListSelectionListener(true));
floatingColumnTableModel=new FloatingColumnTableModel();
floatingColumnTable=new JTable(floatingColumnTableModel);
floatingColumnTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
ListSelectionModel floating=floatingColumnTable
.getSelectionModel();
floating.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
MListSelectionListener listener=new MListSelectionListener(false);
//
floating.addListSelectionListener(listener); //don't miss this sentence
JScrollPane scrollPane=new JScrollPane();
scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedColumnTable.getTableHeader());
JViewport viewport=new JViewport();
viewport.setView(fixedColumnTable);
viewport.setPreferredSize(fixedColumnTable.getPreferredSize());
scrollPane.setRowHeaderView(viewport);
scrollPane.setViewportView(floatingColumnTable);
add(scrollPane,BorderLayout.CENTER);
}

private class FixedColumnTableModel extends AbstractTableModel{
private static final long serialVersionUID=1L;
public int getColumnCount(){
return fixedColumn;
}
public int getRowCount(){
return tableValueV.size();
}
public Object getValueAt(int rowIndex,int columnIndex){
return tableValueV.get(rowIndex).get(columnIndex);
}
// missed
@Override
public String getColumnName(int columnIndex) {// 返回指定列的名称
return columnNameV.get(columnIndex);
}
}

private class FloatingColumnTableModel extends AbstractTableModel{
private static final long serialVersionUID=1L;
public int getColumnCount(){
return columnNameV.size(); //错误的一行,需要改成下面一行
//return columnNameV.size() - fixedColumn;
/*
* java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 21
at java.util.Vector.get(Unknown Source)
at e21_07.MfixedColumnTable$FloatingColumnTableModel.getColumnName(MfixedColumnTable.java:86)
at javax.swing.JTable.addColumn(Unknown Source)
at javax.swing.JTable.createDefaultColumnsFromModel(Unknown Source)
at javax.swing.JTable.tableChanged(Unknown Source)
at javax.swing.JTable.setModel(Unknown Source)
at javax.swing.JTable.<init>(Unknown Source)
at javax.swing.JTable.<init>(Unknown Source)
at e21_07.MfixedColumnTable.<init>(MfixedColumnTable.java:34)
at e21_07.ExampleFrame_07.<init>(ExampleFrame_07.java:39)
at e21_07.ExampleFrame_07.main(ExampleFrame_07.java:13)

* */

}
public int getRowCount(){
return tableValueV.size();
}
public Object getValueAt(int rowIndex,int columnIndex){
return tableValueV.get(rowIndex)
.get(columnIndex+fixedColumn);
}
@Override
public String getColumnName(int columnIndex){
return columnNameV.get(columnIndex+fixedColumn);
}
}
private class MListSelectionListener implements ListSelectionListener{
boolean isFixedColumnTable=true;
public MListSelectionListener(boolean isFixedColumnTable){
this.isFixedColumnTable=isFixedColumnTable;
}
public void valueChanged(ListSelectionEvent e){
if(isFixedColumnTable){
int row=fixedColumnTable.getSelectedRow();
floatingColumnTable.setRowSelectionInterval(row, row);
}else{
int row=floatingColumnTable.getSelectedRow();
fixedColumnTable.setRowSelectionInterval(row, row);
}
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ArrayIndexOutOfBound
相关文章推荐