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; /** *

Title: 带左侧选择列的表

*

Description: 创建带有左侧选择列的表格

* 通过如下的方式生产需要的表格 * ChoiceColumnTable cTableModel = new ChoiceColumnTable(tableModel); * JScrollPane jsp = cTableModel.createChoiceColumnTable(); *

Copyright: Copyright (c) 2011

*

Company: VCI

* @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; } /** * *

Description: 根据表的模型,创建带有左侧选择列的表,并将表填入到Scrollpane中进行返回。

* * @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; } /** * *

Description: 根据表的模型,创建带有左侧选择列的表,并将表填入到Scrollpane中进行返回。

* @param alignType 数据表格单元格的默认对齐方式 * @author Administrator * @time 2011-7-24 * @return */ public JScrollPane createChoiceColumnTable(int alignType) { JScrollPane jsp = this.createChoiceColumnTable(); this.setCellAlignType(alignType); return jsp; } /** * *

Description: 根据表的模型,创建带有左侧选择列的表,并将表填入到Scrollpane中进行返回。

* @param defaultAlignType 数据表格单元格的默认对齐方式 * @specialAlignType 特别列的对齐方式 * @author Administrator * @time 2011-7-24 * @return */ public JScrollPane createChoiceColumnTable(int defaultAlignType, HashMap 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 *

e.g: DefaultTableCellRenderer.CENTER

*/ public void setCellAlignType(int alignType){ this.setCellAlignType(alignType, new HashMap()); } private void setCellAlignType(int alignType, HashMap 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); } } }