I am having trouble implementing a custom cell renderer which will wrap message content when it extends past one line in length. The following is what I have:
What am I doing wrong here?Code:public class MessageTable extends JTable { private static MessageTable messageTable; private DefaultTableModel model = new DefaultTableModel(); private String[] emptyData = {}; private TreeMap<Integer, String> messages = null; public class LineWrapCellRenderer extends JTextArea implements TableCellRenderer { @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { this.setText((String)value); this.setWrapStyleWord(true); this.setLineWrap(true); this.setBackground(Color.YELLOW); int fontHeight = this.getFontMetrics(this.getFont()).getHeight(); int textLength = this.getText().length(); int lines = textLength / this.getColumns() +1;//+1, because we need at least 1 row. int height = fontHeight * lines; table.setRowHeight(row, height); return this; } } public MessageTable() { super(); messageTable = this; this.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); model.addColumn("Message Number", emptyData); model.addColumn("Message Content", emptyData); this.setModel(model); this.setFont(MappingView.theFont); this.setDefaultRenderer(String.class, new LineWrapCellRenderer()); } /** * Set the current messages. * @param messages */ public void setCurrentMessages(TreeMap<Integer, String> messages) { clearCurrentMessages(); this.messages = messages; if (messages != null) { for (Integer key : messages.keySet()) { String[] row = { key.toString(), messages.get(key).toString() }; model.addRow(row); } } }
Thanks.




Reply With Quote