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 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!
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);
}
}
to musi być wykonane przed metodą resize.
Jeśli masz:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
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.
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);
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
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