fork download
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package presenter;
  7.  
  8. import javax.swing.JTable;
  9. import javax.swing.JTextArea;
  10. import javax.swing.table.DefaultTableCellRenderer;
  11. import javax.swing.table.TableCellRenderer;
  12. import javax.swing.table.TableColumn;
  13. import javax.swing.table.TableColumnModel;
  14. import java.awt.Component;
  15. import java.util.Enumeration;
  16. import java.util.HashMap;
  17. import java.util.Map;
  18.  
  19. /**
  20.  * The standard class for rendering (displaying) individual cells in a JTable.
  21.  * This class inherits from JTextArea, a standard component class.
  22.  * However JTextArea is a multi-line area that displays plain text.
  23.  *
  24.  * This class implements TableCellRenderer , i.e. interface.
  25.  * This interface defines the method required by any object that
  26.  * would like to be a renderer for cells in a JTable.
  27.  *
  28.  * @author Manivel
  29.  * @see JTable
  30.  * @see JTextArea
  31.  */
  32.  
  33. public class TextAreaRenderer extends JTextArea implements TableCellRenderer {
  34. private final DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
  35.  
  36. // Column heights are placed in this Map
  37. private final Map<JTable, Map<Object, Map<Object, Integer>>> tablecellSizes = new HashMap<JTable, Map<Object, Map<Object, Integer>>>();
  38.  
  39. /**
  40.   * Creates a text area renderer.
  41.   */
  42. public TextAreaRenderer() {
  43. setLineWrap(true);
  44. setWrapStyleWord(true);
  45. }
  46.  
  47. /**
  48.   * Returns the component used for drawing the cell. This method is
  49.   * used to configure the renderer appropriately before drawing.
  50.   *
  51.   * @param jTable3 - JTable object
  52.   * @param value - the value of the cell to be rendered.
  53.   * @param isSelected - isSelected true if the cell is to be rendered with the selection highlighted;
  54.   * otherwise false.
  55.   * @param hasFocus - if true, render cell appropriately.
  56.   * @param row - The row index of the cell being drawn.
  57.   * @param column - The column index of the cell being drawn.
  58.   * @return - Returns the component used for drawing the cell.
  59.   */
  60. @Override
  61. public Component getTableCellRendererComponent(JTable jTable3, Object value, boolean isSelected,boolean hasFocus, int row, int column) {
  62. // set the Font, Color, etc.
  63. renderer.getTableCellRendererComponent(jTable3, value, isSelected, hasFocus, row, column);
  64. setForeground(renderer.getForeground());
  65. setBackground(renderer.getBackground());
  66. setBorder(renderer.getBorder());
  67. setFont(renderer.getFont());
  68. setText(renderer.getText());
  69.  
  70. TableColumnModel columnModel = jTable3.getColumnModel();
  71. setSize(columnModel.getColumn(column).getWidth(), 0);
  72. int height_wanted = (int) getPreferredSize().getHeight();
  73. addSize(jTable3, row, column, height_wanted);
  74. height_wanted = findTotalMaximumRowSize(jTable3, row);
  75.  
  76. if (height_wanted != jTable3.getRowHeight(row)) {
  77. jTable3.setRowHeight(row, height_wanted);
  78. }
  79. return this;
  80. }
  81.  
  82. /**
  83.   * @param jTable3 - JTable object
  84.   * @param row - The row index of the cell being drawn.
  85.   * @param column - The column index of the cell being drawn.
  86.   * @param height - Row cell height as int value
  87.   * This method will add size to cell based on row and column number
  88.   */
  89. private void addSize(JTable jTable3, int row, int column, int height) {
  90. Map<Object, Map<Object, Integer>> rowsMap = tablecellSizes.get(jTable3);
  91. if (rowsMap == null) {
  92. tablecellSizes.put(jTable3, rowsMap = new HashMap<Object, Map<Object, Integer>>());
  93. }
  94. Map<Object, Integer> rowheightsMap = rowsMap.get(row);
  95. if (rowheightsMap == null) {
  96. rowsMap.put(row, rowheightsMap = new HashMap<Object, Integer>());
  97. }
  98. rowheightsMap.put(column, height);
  99. }
  100.  
  101. /**
  102.   * Look through all columns and get the renderer. If it is
  103.   * also a TextAreaRenderer, we look at the maximum height in
  104.   * its hash table for this row.
  105.   *
  106.   * @param jTable3 -JTable object
  107.   * @param row - The row index of the cell being drawn.
  108.   * @return row maximum height as integer value
  109.   */
  110. private int findTotalMaximumRowSize(JTable jTable3, int row) {
  111. int maximum_height = 0;
  112. Enumeration<TableColumn> columns = jTable3.getColumnModel().getColumns();
  113. while (columns.hasMoreElements()) {
  114. TableColumn tc = columns.nextElement();
  115. TableCellRenderer cellRenderer = tc.getCellRenderer();
  116. if (cellRenderer instanceof TextAreaRenderer) {
  117. TextAreaRenderer tar = (TextAreaRenderer) cellRenderer;
  118. maximum_height = Math.max(maximum_height,
  119. tar.findMaximumRowSize(jTable3, row));
  120. }
  121. }
  122.  
  123. return maximum_height;
  124. }
  125.  
  126. /**
  127.   * This will find the maximum row size
  128.   *
  129.   * @param jTable3 - JTable object
  130.   * @param row - The row index of the cell being drawn.
  131.   * @return row maximum height as integer value
  132.   */
  133. private int findMaximumRowSize(JTable jTable3, int row) {
  134. Map<Object, Map<Object, Integer>> rows = tablecellSizes.get(jTable3);
  135. if (rows == null) return 0;
  136. Map<Object, Integer> rowheights = rows.get(row);
  137. if (rowheights == null) return 0;
  138. int maximum_height = 0;
  139. for (Map.Entry<Object, Integer> entry : rowheights.entrySet()) {
  140. int cellHeight = entry.getValue();
  141. maximum_height = Math.max(maximum_height, cellHeight);
  142. }
  143. return maximum_height;
  144. }
  145. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:33: error: class TextAreaRenderer is public, should be declared in a file named TextAreaRenderer.java
public class TextAreaRenderer extends JTextArea implements TableCellRenderer { 
       ^
1 error
stdout
Standard output is empty