Automatyczna zmiana rozmiaru szerokości kolumn JTable

Potrzebuję, aby mój JTable automatycznie zmieniał rozmiar szerokości kolumn, aby pasował do zawartości. Znalazłem TableColumnAdjuster Klasa bardzo przydatna. Ale jest mały problem. Powiedzmy, że mam 5 kolumn, a ich treść jest bardzo krótka. W takim przypadku, jeśli użyję auto adjuster, ustawia cztery pierwsze szerokości kolumn zgodnie z ich zawartością i daje całą resztę miejsca do ostatniej kolumny. Zobacz przykład.

Tutaj wpisz opis obrazka

Tutaj w ostatniej kolumnie Balance podano wszystkie nadmiar miejsca. Ale co, jeśli muszę dać to miejsce do jednej ze środkowych kolumn. W powyższym przypadku muszę przypisać tę spację do trzeciej kolumny name. Próbowałem zmodyfikować metodę TableColumnAdjuster klasy adjustColumns(). Ale nie mogłem go uruchomić.

Próbowałem zarówno column.setPreferredWidth() jak i column.setWidth() do zmiany wielkości kolumn. Ale to niczego nie zmienia. Jak skutecznie zmienić rozmiar kolumny JTable. Jeśli jest jakaś inna alternatywa lub bezpośrednia odpowiedź na mój główny problem, to lepiej. Dzięki!

Author: Sumudu, 2013-07-13

4 answers

Możesz spróbować następnego:

public void resizeColumnWidth(JTable table) {
    final TableColumnModel columnModel = table.getColumnModel();
    for (int column = 0; column < table.getColumnCount(); column++) {
        int width = 15; // Min width
        for (int row = 0; row < table.getRowCount(); row++) {
            TableCellRenderer renderer = table.getCellRenderer(row, column);
            Component comp = table.prepareRenderer(renderer, row, column);
            width = Math.max(comp.getPreferredSize().width +1 , width);
        }
        if(width > 300)
            width=300;
        columnModel.getColumn(column).setPreferredWidth(width);
    }
}

JTable

to musi być wykonane przed metodą resize.
Jeśli masz:

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

JTable

 65
Author: Paul Vargas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-23 23:34:56

Nie ma opcji automatycznej zmiany rozmiaru jednej kolumny większej od drugiej.

Może uda Ci się coś takiego:

tca = new TableColumnAdjuster( table, 0 );
tca.adjustColumns();
TableColumnModel tcm = table.getColumnModel();  
TableColumn tc = tcm.getColumn(1);
tc.setWidth(tc.getWidth() + 25);

Pozwoli to na dodanie dodatkowego miejsca do kolumny 1. To dodatkowe miejsce zostanie dodane tylko przy pierwszym wyświetleniu tabeli.

Inną opcją jest użycie:

table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

To przydzieliłoby dodatkową przestrzeń proporcjonalnie do każdej kolumny.

 5
Author: camickr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-13 15:41:08

SetAutoResizeMode () powie Twojej tabeli, jak zmienić rozmiar powinieneś spróbować wszystkie dostępne opcje, aby zobaczyć różnice, w moim przypadku chciałem specjalnie zmienić rozmiar dwóch kolumn i pozwolić mu zdecydować, jak dostosować wszystkie inne.

jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
TableColumnModel colModel=jTable1.getColumnModel();
colModel.getColumn(1).setPreferredWidth(25);    
colModel.getColumn(2).setPreferredWidth(400);
 4
Author: Edwin Barahona,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-08 22:43:54

Możesz to zrobić:

JPanel jp = new JPanel();
jp.add(table);

jp.setLayout(new GridLayout(1,1)); /* little trick ;) and believe me that this step is important to the automatic all columns resize! A import is also needed for using GridLayout*/
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); // this is obvius part
 1
Author: augus1990,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-11 16:57:34