Changeset 59 in tmcsimulator for trunk/src/tmcsim/simulationmanager/model/LogEntryCellRenderer.java
- Timestamp:
- 03/15/2017 10:20:21 AM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/tmcsim/simulationmanager/model/LogEntryCellRenderer.java
r2 r59 1 1 package tmcsim.simulationmanager.model; 2 2 3 import java.awt.Color; 3 4 import java.awt.Component; 4 5 import java.util.Enumeration; … … 6 7 import java.util.Iterator; 7 8 import java.util.Map; 8 9 9 import javax.swing.JTable; 10 10 import javax.swing.JTextArea; … … 16 16 /** 17 17 * TableCellRender to display a multi-line cell. 18 * 18 * 19 19 * http://www.roseindia.net/javatutorials/JTable_in_JDK.shtml 20 * 20 21 * @author Dr. Heinz M. Kabutz 21 22 */ 22 23 @SuppressWarnings("serial") 23 24 public class LogEntryCellRenderer extends JTextArea implements 24 TableCellRenderer { 25 26 /** DefaultTableCellRenderer for displaying multi line cells*/ 25 TableCellRenderer 26 { 27 /** 28 * DefaultTableCellRenderer for displaying multi line cells 29 */ 27 30 private final DefaultTableCellRenderer adaptee; 28 29 /** map from table to map of rows to map of column heights */ 31 /** 32 * map from table to map of rows to map of column heights 33 */ 30 34 private final Map<JTable, Map<Integer, Map<Integer, Integer>>> cellSizes; 31 35 32 public LogEntryCellRenderer() { 36 public LogEntryCellRenderer() 37 { 33 38 34 adaptee = new DefaultTableCellRenderer();39 adaptee = new DefaultTableCellRenderer(); 35 40 cellSizes = new HashMap<JTable, Map<Integer, Map<Integer, Integer>>>(); 36 41 37 42 setLineWrap(true); 38 43 setWrapStyleWord(true); … … 40 45 41 46 public Component getTableCellRendererComponent(JTable table, Object obj, 42 boolean isSelected, boolean hasFocus, int row, int column) { 47 boolean isSelected, boolean hasFocus, int row, int column) 48 { 43 49 44 50 // set the colours, etc. using the standard for that platform 45 51 adaptee.getTableCellRendererComponent(table, obj, isSelected, hasFocus, 46 52 row, column); 47 setForeground(adaptee.getForeground()); 48 setBackground(adaptee.getBackground()); 53 // FIXES defect where cell text disappears when selected 54 // TODO: Better would be to make table not selectable 55 // http://stackoverflow.com/questions/8291329/set-all-jtable-cells-unselectable 56 if (isSelected) 57 { 58 setForeground(Color.WHITE); 59 setBackground(Color.GRAY); 60 } 61 else 62 { 63 setForeground(adaptee.getForeground()); 64 setBackground(adaptee.getBackground()); 65 } 49 66 setBorder(adaptee.getBorder()); 50 67 setFont(adaptee.getFont()); … … 57 74 addSize(table, row, column, height_wanted); 58 75 height_wanted = findTotalMaximumRowSize(table, row); 59 if (height_wanted != table.getRowHeight(row)) { 76 if (height_wanted != table.getRowHeight(row)) 77 { 60 78 table.setRowHeight(row, height_wanted); 61 79 } 62 80 63 81 return this; 64 82 } 65 83 66 private void addSize(JTable table, int row, int column, int height) { 84 private void addSize(JTable table, int row, int column, int height) 85 { 67 86 Map<Integer, Map<Integer, Integer>> rows = cellSizes.get(table); 68 if (rows == null) { 87 if (rows == null) 88 { 69 89 cellSizes.put(table, rows = new HashMap<Integer, Map<Integer, Integer>>()); 70 90 } 71 91 72 92 Map<Integer, Integer> rowheights = rows.get(new Integer(row)); 73 if (rowheights == null) { 93 if (rowheights == null) 94 { 74 95 rows.put(new Integer(row), rowheights = new HashMap<Integer, Integer>()); 75 96 } … … 78 99 79 100 /** 80 * Look through all columns and get the renderer. If it is81 * also a TextAreaRenderer, we look at the maximum height in82 * its hash table forthis row.101 * Look through all columns and get the renderer. If it is also a 102 * TextAreaRenderer, we look at the maximum height in its hash table for 103 * this row. 83 104 */ 84 private int findTotalMaximumRowSize(JTable table, int row) { 105 private int findTotalMaximumRowSize(JTable table, int row) 106 { 85 107 int maximum_height = 0; 86 108 Enumeration columns = table.getColumnModel().getColumns(); 87 while (columns.hasMoreElements()) { 109 while (columns.hasMoreElements()) 110 { 88 111 TableColumn tc = (TableColumn) columns.nextElement(); 89 112 TableCellRenderer cellRenderer = tc.getCellRenderer(); 90 if (cellRenderer instanceof LogEntryCellRenderer) { 113 if (cellRenderer instanceof LogEntryCellRenderer) 114 { 91 115 LogEntryCellRenderer tar = (LogEntryCellRenderer) cellRenderer; 92 116 maximum_height = Math.max(maximum_height, tar … … 97 121 } 98 122 99 private int findMaximumRowSize(JTable table, int row) { 123 private int findMaximumRowSize(JTable table, int row) 124 { 100 125 Map<Integer, Map<Integer, Integer>> rows = cellSizes.get(table); 101 126 if (rows == null) 127 { 102 128 return 0; 103 129 } 130 104 131 Map<Integer, Integer> rowheights = rows.get(new Integer(row)); 105 132 if (rowheights == null) 133 { 106 134 return 0; 135 } 107 136 int maximum_height = 0; 108 109 for (Iterator it = rowheights.entrySet().iterator(); it.hasNext();) { 137 138 for (Iterator it = rowheights.entrySet().iterator(); it.hasNext();) 139 { 110 140 Map.Entry entry = (Map.Entry) it.next(); 111 141 int cellHeight = ((Integer) entry.getValue()).intValue();
Note: See TracChangeset
for help on using the changeset viewer.
