Search code examples
swingtextjtable

JTable (JTextArea) cell wrapping


I want to adjust the size of a particular cell in JTable so that it should auto set itself when the size of text is greater than some size. This is how I am adding content to my table.

if(rs.next()) {
    rs.beforeFirst();
    Vector<String> columnNames = new Vector<String>();
    columnNames.add("Tweet");
    columnNames.add("Updated Time");

    Vector<Vector<Object>> data = new Vector<Vector<Object>>();

    while (rs.next()) {
        Vector<Object> vector = new Vector<Object>();
        Tweet = rs.getString(1);
        vector.add(Tweet);
        SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Timestamp time = rs.getTimestamp(2);
        Updated_time = sdf.format(time);
        vector.add(Updated_time);

        data.add(vector);
    }

    DefaultTableModel dfm = new DefaultTableModel(data, columnNames);
    
    JTable table = new JTable(dfm);
    table.setAutoscrolls(true);
    table.setShowGrid(false);

    ((DefaultTableCellRenderer)table.getDefaultRenderer(Object.class)).setOpaque(false);
    table.setOpaque(false);

Solution

  • public class MyRenderer extends JTextArea implements TableCellRenderer {
        private static final long serialVersionUID = 1L;
    
        public MyRenderer() {
            setLineWrap(true);
            setWrapStyleWord(true);
            setOpaque(true);
        }
    
        @Override
        public Component getTableCellRendererComponent(
                JTable table, 
                Object value, 
                boolean isSelected, 
                boolean hasFocus,
                int row, int column
        ) {
            // TODO Auto-generated method stub
            setText(value.toString());//or something in value, like value.getNote()..
            if (isSelected) {
                setForeground(table.getSelectionForeground());
                setBackground(table.getSelectionBackground());
            } else {
                setForeground(table.getForeground());
                setBackground(table.getBackground());
            }
            setSize(table.getColumnModel().getColumn(column).getWidth(),
                    getPreferredSize().height);
            if (table.getRowHeight(row) != getPreferredSize().height) {
                table.setRowHeight(row, getPreferredSize().height);
            }
            return this;
        }
    }