ludc
2024-09-14 36c2449aec5b51e5ed4e5c6841154b746060e09a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
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);
        }
    }
}