Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resizing JTable columns automatically based on text size

Tags:

java

swing

jtable

I have a JTable with some fields with long text and some with little text.

By default, this is how it looks:

enter image description here

Notice how the "Name" and "Title" rows are not shortened.

I would like to know two things:

  1. How to manually set the width of Headers(Such as Name, Title, Surname)
  2. How to automatically resize all of them depending on the text.

Here is the code:

    String[] columnNames = {"Name", "Title", "Surname", "ID"};
    Object[][] testData = {
            {"John", "Mr.", "Doe", "61020384U"},
    };

    nameTable = new JTable(testData, columnNames);
    nameTable.setFont(new Font("Tahoma", Font.PLAIN, 11));
    window.add(new JScrollPane(nameTable));

I have looked at the Swing Tutorials but I either must have missed something or it isn't there.

like image 837
David Avatar asked Aug 11 '11 22:08

David


1 Answers

I think that by defalut is there 80pixels, but you can change that with follows, for example ...

TableColumnModel tcm = myTable.getColumnModel();
tcm.getColumn(0).setPreferredWidth(100);     //Name
tcm.getColumn(1).setPreferredWidth(40);    //Title
tcm.getColumn(2).setPreferredWidth(400);    //Surname
tcm.getColumn(3).setPreferredWidth(40);    //ID

EDIT

to your second question is better look here, please there are lots of usefull examples about TableColumn

like image 101
mKorbel Avatar answered Oct 11 '22 15:10

mKorbel