source: tmcsimulator/trunk/src/tmcsim/simulationmanager/model/LogEntryCellRenderer.java @ 2

Revision 2, 4.2 KB checked in by jdalbey, 10 years ago (diff)

Initial Import of project files

Line 
1package tmcsim.simulationmanager.model;
2
3import java.awt.Component;
4import java.util.Enumeration;
5import java.util.HashMap;
6import java.util.Iterator;
7import java.util.Map;
8
9import javax.swing.JTable;
10import javax.swing.JTextArea;
11import javax.swing.table.DefaultTableCellRenderer;
12import javax.swing.table.TableCellRenderer;
13import javax.swing.table.TableColumn;
14import javax.swing.table.TableColumnModel;
15
16/**
17 * TableCellRender to display a multi-line cell.
18 *
19 * http://www.roseindia.net/javatutorials/JTable_in_JDK.shtml
20 * @author Dr. Heinz M. Kabutz
21 */
22@SuppressWarnings("serial")
23public class LogEntryCellRenderer extends JTextArea implements
24        TableCellRenderer {
25
26    /** DefaultTableCellRenderer for displaying multi line cells*/
27    private final DefaultTableCellRenderer adaptee;
28
29    /** map from table to map of rows to map of column heights */
30    private final Map<JTable, Map<Integer, Map<Integer, Integer>>> cellSizes;
31
32    public LogEntryCellRenderer() {
33
34        adaptee   = new DefaultTableCellRenderer();
35        cellSizes = new HashMap<JTable, Map<Integer, Map<Integer, Integer>>>();
36       
37        setLineWrap(true);
38        setWrapStyleWord(true);
39    }
40
41    public Component getTableCellRendererComponent(JTable table, Object obj,
42            boolean isSelected, boolean hasFocus, int row, int column) {
43
44        // set the colours, etc. using the standard for that platform
45        adaptee.getTableCellRendererComponent(table, obj, isSelected, hasFocus,
46                row, column);
47        setForeground(adaptee.getForeground());
48        setBackground(adaptee.getBackground());
49        setBorder(adaptee.getBorder());
50        setFont(adaptee.getFont());
51        setText(adaptee.getText());
52
53        // This line was very important to get it working with JDK1.4
54        TableColumnModel columnModel = table.getColumnModel();
55        setSize(columnModel.getColumn(column).getWidth(), 100000);
56        int height_wanted = (int) getPreferredSize().getHeight();
57        addSize(table, row, column, height_wanted);
58        height_wanted = findTotalMaximumRowSize(table, row);
59        if (height_wanted != table.getRowHeight(row)) {
60            table.setRowHeight(row, height_wanted);
61        }
62       
63        return this;
64    }
65
66    private void addSize(JTable table, int row, int column, int height) {
67        Map<Integer, Map<Integer, Integer>> rows = cellSizes.get(table);
68        if (rows == null) {
69            cellSizes.put(table, rows = new HashMap<Integer, Map<Integer, Integer>>());
70        }
71       
72        Map<Integer, Integer> rowheights = rows.get(new Integer(row));
73        if (rowheights == null) {
74            rows.put(new Integer(row), rowheights = new HashMap<Integer, Integer>());
75        }
76        rowheights.put(new Integer(column), new Integer(height));
77    }
78
79    /**
80     * Look through all columns and get the renderer.  If it is
81     * also a TextAreaRenderer, we look at the maximum height in
82     * its hash table for this row.
83     */
84    private int findTotalMaximumRowSize(JTable table, int row) {
85        int maximum_height = 0;
86        Enumeration columns = table.getColumnModel().getColumns();
87        while (columns.hasMoreElements()) {
88            TableColumn tc = (TableColumn) columns.nextElement();
89            TableCellRenderer cellRenderer = tc.getCellRenderer();
90            if (cellRenderer instanceof LogEntryCellRenderer) {
91                LogEntryCellRenderer tar = (LogEntryCellRenderer) cellRenderer;
92                maximum_height = Math.max(maximum_height, tar
93                        .findMaximumRowSize(table, row));
94            }
95        }
96        return maximum_height;
97    }
98
99    private int findMaximumRowSize(JTable table, int row) {
100        Map<Integer, Map<Integer, Integer>> rows = cellSizes.get(table);
101        if (rows == null)
102            return 0;
103       
104        Map<Integer, Integer> rowheights = rows.get(new Integer(row));
105        if (rowheights == null)
106            return 0;
107        int maximum_height = 0;
108       
109        for (Iterator it = rowheights.entrySet().iterator(); it.hasNext();) {
110            Map.Entry entry = (Map.Entry) it.next();
111            int cellHeight = ((Integer) entry.getValue()).intValue();
112            maximum_height = Math.max(maximum_height, cellHeight);
113        }
114        return maximum_height;
115    }
116}
Note: See TracBrowser for help on using the repository browser.