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

报错原因:

请看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);
			}
		}
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

txwtech笛克特科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值