Авто / лучше всего подходят столбцы JTable, но растягивают последний столбец - PullRequest
5 голосов
/ 25 июня 2011

У меня есть следующий JTable (на самом деле это ETable от Netbeans).Он растягивается по всему контейнеру, в котором он находится - я хотел бы сохранить это и не использовать JTable.AUTO_RESIZE_OFF

enter image description here

Я хотел бы подогнать его программно, как показано ниже, изменяя размер каждогостолбец, чтобы соответствовать только содержимому ячейки или тексту заголовка столбца, и имея самый правый столбец, заполните оставшееся пространство.Как я могу это сделать?

enter image description here

Ответы [ 2 ]

0 голосов
/ 09 января 2016

Вы должны установить autoResize на OFF (setAutoResizeMode(JTable.AUTO_RESIZE_OFF);), но вам также нужен вспомогательный метод для изменения размера ваших столбцов.

Это внутри пользовательского класса, который расширяет JTable, но вы также можете легко ссылаться на существующий JTable:

public void resizeColumnWidth() {
    int cumulativeActual = 0;
    int padding = 15;
    for (int columnIndex = 0; columnIndex < getColumnCount(); columnIndex++) {
        int width = 50; // Min width
        TableColumn column = columnModel.getColumn(columnIndex);
        for (int row = 0; row < getRowCount(); row++) {
            TableCellRenderer renderer = getCellRenderer(row, columnIndex);
            Component comp = prepareRenderer(renderer, row, columnIndex);
            width = Math.max(comp.getPreferredSize().width + padding, width);
        }
        if (columnIndex < getColumnCount() - 1) {
            column.setPreferredWidth(width);
            cumulativeActual += column.getWidth();
        } else { //LAST COLUMN
            //Use the parent's (viewPort) width and subtract the previous columbs actual widths.
            column.setPreferredWidth((int) getParent().getSize().getWidth() - cumulativeActual);
        }
    }
}

Вызывать resizeColumnWidth () всякий раз, когда вы добавляете строку.

При желании добавьте прослушиватель к таблице, чтобы при изменении размера самой таблицы также изменялся размер столбцов:

public MyCustomJTable() {
    super();
    addHierarchyBoundsListener(new HierarchyBoundsAdapter() {
        @Override
        public void ancestorResized(HierarchyEvent e) {
            super.ancestorResized(e);
            resizeColumnWidth();
        }
    });
    setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}
0 голосов
/ 12 августа 2015

Вы можете отключить автоматическое изменение размера. В этом случае размер столбцов будет изменяться автоматически в зависимости от содержимого. Но в этом случае, если общая ширина столбца меньше ширины таблицы, на правой стороне будет пустое пространство. Если оно больше, появится горизонтальная полоса прокрутки.

Вы можете назначить предпочтительную ширину для каждого столбца, используя TableColumn.setPreferredWidth. Swing будет пытаться распределить дополнительное пространство в соответствии с этим. Но это также не гарантируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...