krpa
krpa

Reputation: 104

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);

Upvotes: 2

Views: 3598

Answers (2)

krpa
krpa

Reputation: 104

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;
    }
}

Upvotes: 2

Yougeshwar Khatri
Yougeshwar Khatri

Reputation: 325

JTable cell actually is showing JLabel, so for text wrapping you can apply html like:

"<html>" + "Your value" + "<br>" + "Desc"

Upvotes: 0

Related Questions