package com.vci.client.ui.table;
|
|
import java.awt.Color;
|
import java.util.HashMap;
|
|
import javax.swing.JScrollPane;
|
import javax.swing.JTable;
|
import javax.swing.JViewport;
|
import javax.swing.ScrollPaneConstants;
|
|
/**
|
* <p>Title: 带左侧选择列的表</p>
|
* <p>Description: 创建带有左侧选择列的表格</p>
|
* 通过如下的方式生产需要的表格
|
* ChoiceColumnTable cTableModel = new ChoiceColumnTable(tableModel);
|
* JScrollPane jsp = cTableModel.createChoiceColumnTable();
|
* <p>Copyright: Copyright (c) 2011</p>
|
* <p>Company: VCI</p>
|
* @author Administrator
|
* @time 2011-7-24
|
* @version 1.0
|
*/
|
public class ChoiceColumnTable extends JTable {
|
|
/**
|
*
|
*/
|
private static final long serialVersionUID = -621380959604120104L;
|
|
private VCIBaseTableModel tableModel = null;
|
private JTable propertyTable = null;
|
private JTable headerColumn = null;
|
private TableSorterData sorter = null;
|
|
public ChoiceColumnTable(VCIBaseTableModel tableModel) {
|
this.tableModel = tableModel;
|
}
|
|
/**
|
*
|
* <p>Description: 根据表的模型,创建带有左侧选择列的表,并将表填入到Scrollpane中进行返回。</p>
|
*
|
* @author Administrator
|
* @time 2011-7-24
|
* @return
|
*/
|
public JScrollPane createChoiceColumnTable() {
|
FirstColumnTableModel firstColumnTM = new FirstColumnTableModel(0);
|
headerColumn = new JTable(this.tableModel, firstColumnTM);
|
headerColumn.setRowHeight(25);
|
headerColumn.getTableHeader().setReorderingAllowed(false);
|
headerColumn.createDefaultColumnsFromModel();
|
headerColumn.setBackground(Color.LIGHT_GRAY);
|
headerColumn.setColumnSelectionAllowed(false);
|
headerColumn.setCellSelectionEnabled(false);
|
|
NonFirstColumnTableModel nonFirstColumnTM = new NonFirstColumnTableModel(100);
|
propertyTable = new JTable(this.tableModel, nonFirstColumnTM);
|
propertyTable.getTableHeader().setReorderingAllowed(false);
|
propertyTable.setRowHeight(25);
|
propertyTable.createDefaultColumnsFromModel();
|
propertyTable.setSelectionModel(headerColumn.getSelectionModel());
|
headerColumn.setDefaultRenderer(headerColumn.getColumnClass(0),new TableRowHeaderRenderer(propertyTable));
|
propertyTable.setModel(this.tableModel);
|
propertyTable.setColumnSelectionAllowed(true);
|
propertyTable.setCellSelectionEnabled(true);
|
propertyTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
|
sorter = new TableSorterData(this.tableModel);
|
propertyTable.setModel(sorter);
|
sorter.setTableHeader(propertyTable.getTableHeader());
|
|
JViewport jv = new JViewport();
|
jv.setView(headerColumn);
|
jv.setPreferredSize(headerColumn.getMaximumSize());
|
|
JScrollPane jsp = new JScrollPane(propertyTable);
|
jsp.setBackground(Color.WHITE);
|
jsp.setRowHeader(jv);
|
jsp.setCorner(ScrollPaneConstants.UPPER_LEFT_CORNER, headerColumn.getTableHeader());
|
jsp.setAutoscrolls(false);
|
return jsp;
|
}
|
|
/**
|
*
|
* <p>Description: 根据表的模型,创建带有左侧选择列的表,并将表填入到Scrollpane中进行返回。</p>
|
* @param alignType 数据表格单元格的默认对齐方式
|
* @author Administrator
|
* @time 2011-7-24
|
* @return
|
*/
|
public JScrollPane createChoiceColumnTable(int alignType) {
|
JScrollPane jsp = this.createChoiceColumnTable();
|
this.setCellAlignType(alignType);
|
return jsp;
|
}
|
|
/**
|
*
|
* <p>Description: 根据表的模型,创建带有左侧选择列的表,并将表填入到Scrollpane中进行返回。</p>
|
* @param defaultAlignType 数据表格单元格的默认对齐方式
|
* @specialAlignType 特别列的对齐方式
|
* @author Administrator
|
* @time 2011-7-24
|
* @return
|
*/
|
public JScrollPane createChoiceColumnTable(int defaultAlignType, HashMap<Integer, Integer> specialAlignType) {
|
JScrollPane jsp = this.createChoiceColumnTable();
|
this.setCellAlignType(defaultAlignType, specialAlignType);
|
return jsp;
|
}
|
|
|
|
public JTable getPropertyTable() {
|
return this.propertyTable;
|
}
|
|
public TableSorterData getTableSorter() {
|
return this.sorter;
|
}
|
|
public int[] getPropertyTableSelectedRows() {
|
return this.sorter.getSelectTableModelRows(headerColumn.getSelectedRows());
|
}
|
|
/**
|
* 设置数据表格的单元格数据的对齐方式
|
* @param alignType 对齐方式枚举值,来源 DefaultTableCellRenderer
|
* <p>e.g: DefaultTableCellRenderer.CENTER</p>
|
*/
|
public void setCellAlignType(int alignType){
|
this.setCellAlignType(alignType, new HashMap<Integer, Integer>());
|
}
|
|
private void setCellAlignType(int alignType, HashMap<Integer, Integer> specialAlignType){
|
JTable table = this.propertyTable;
|
int count = table.getColumnCount();
|
if(count == 0) return;
|
HorizontalAlignTableCellRender cellRenderer = new HorizontalAlignTableCellRender(alignType);
|
for(int i = 0; i < count; i++){
|
if(specialAlignType.containsKey(i)){
|
cellRenderer = new HorizontalAlignTableCellRender(specialAlignType.get(i));
|
}else{
|
cellRenderer = new HorizontalAlignTableCellRender(alignType);
|
}
|
table.getColumnModel().getColumn(i).setCellRenderer(cellRenderer);
|
}
|
}
|
}
|