packagetest;importjava.awt.BorderLayout;importjava.util.Vector;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swing.JViewport;importjavax.swing.ListSelectionModel;importjavax.swing.event.ListSelectionEvent;importjavax.swing.event.ListSelectionListener;importjavax.swing.table.AbstractTableModel;public class MFixedColumnTable extendsJPanel {/****/
private static final long serialVersionUID = -8001758880985479654L;private Vector columnNameV; //declare the table column name vector
private Vector> tableValueV; //declare the table value//vector
private int fixedColumn = 1; //the fixed column number
privateJTable fixedColumnTable;privateFixedColumnTableModel fixedColumnTableModel;privateJTable floatingColumnTable;privateFloatingColumnTableModel floatingColumnTableModel;private class FixedColumnTableModel extends AbstractTableModel { //inner class
/****/
private static final long serialVersionUID = 3935656415101599023L;
@Overridepublic intgetRowCount() {//TODO Auto-generated method stub
returntableValueV.size();
}
@Overridepublic intgetColumnCount() {//TODO Auto-generated method stub
returnfixedColumn;
}
@Overridepublic Object getValueAt(int rowIndex, intcolumnIndex) {//TODO Auto-generated method stub
returntableValueV.get(rowIndex).get(columnIndex);
}
@Overridepublic String getColumnName(intcolumnIndex) {returncolumnNameV.get(columnIndex);
}
}private class FloatingColumnTableModel extendsAbstractTableModel {/****/
private static final long serialVersionUID = -2481466672947191281L;
@Overridepublic intgetRowCount() {returntableValueV.size();
}
@Overridepublic intgetColumnCount() {return columnNameV.size() -fixedColumn;
}
@Overridepublic Object getValueAt(int rowIndex, intcolumnIndex) {return tableValueV.get(rowIndex).get(columnIndex +fixedColumn);
}
@Overridepublic String getColumnName(intcolumnIndex) {return columnNameV.get(columnIndex +fixedColumn);
}
}private class MListSelectionListener implementsListSelectionListener {boolean isFixedColumnTable = true;public MListSelectionListener(booleanisFixedColumnTable) {this.isFixedColumnTable =isFixedColumnTable;
}
@Overridepublic voidvalueChanged(ListSelectionEvent e) {//TODO Auto-generated method stub
if(isFixedColumnTable) {int row =fixedColumnTable.getSelectedRow();
floatingColumnTable.setRowSelectionInterval(row, row);
}else{int row =floatingColumnTable.getSelectedRow();
fixedColumnTable.setRowSelectionInterval(row, row);
}
}
}public MFixedColumnTable(VectorcolumnNameV,
Vector> tableValueV, intfixedColumn) {super();
setLayout(newBorderLayout());this.columnNameV =columnNameV;this.tableValueV =tableValueV;this.fixedColumn =fixedColumn;//create fixedColumnTable
fixedColumnTableModel = newFixedColumnTableModel();
fixedColumnTable= newJTable(fixedColumnTableModel);
ListSelectionModel fixed=fixedColumnTable.getSelectionModel();
fixed.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
fixed.addListSelectionListener(new MListSelectionListener(true));//create floatingColumnTable
floatingColumnTableModel = newFloatingColumnTableModel();
floatingColumnTable= newJTable(floatingColumnTableModel);
floatingColumnTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
ListSelectionModel floating=floatingColumnTable.getSelectionModel();
floating.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
floating.addListSelectionListener(new MListSelectionListener(false));//create scrollPane
JScrollPane scrollPane = newJScrollPane();
scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER,
fixedColumnTable.getTableHeader());
JViewport viewport= newJViewport();
viewport.setView(fixedColumnTable);
viewport.setPreferredSize(fixedColumnTable.getPreferredSize());
scrollPane.setRowHeaderView(viewport);//viewport 视口
scrollPane.setViewportView(floatingColumnTable);
add(scrollPane, BorderLayout.CENTER);
}
}