auto Resize JTable - Java Swing

Java examples for Swing:JTable

Description

auto Resize JTable

Demo Code


//package com.java2s;
import javax.swing.*;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Component;
import javax.swing.text.JTextComponent;

import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableCellRenderer;

public class Main {
    private static final int DEFAULT_COLUMN_PADDING = 5;

    public static int autoResizeTable(JTable aTable) {
        return autoResizeTable(aTable, DEFAULT_COLUMN_PADDING);
    }//from   www .  jav  a  2  s.co  m

    public static int autoResizeTable(JTable aTable, int columnPadding) {
        int columnCount = aTable.getColumnCount();
        int currentTableWidth = aTable.getWidth();
        int tableWidth = 0;
        Dimension cellSpacing = aTable.getIntercellSpacing();
        if (columnCount > 0) // must have columns !
        {
            // STEP ONE : Work out the column widths
            int columnWidth[] = new int[columnCount];
            for (int i = 0; i < columnCount; i++) {
                columnWidth[i] = getMaxColumnWidth(aTable, i, true,
                        columnPadding);
                tableWidth += columnWidth[i];
            }
            // account for cell spacing too
            tableWidth += (columnCount - 1) * cellSpacing.width;
            // STEP TWO : Dynamically resize each column
            // try changing the size of the column names area
            JTableHeader tableHeader = aTable.getTableHeader();
            Dimension headerDim = tableHeader.getPreferredSize();
            // headerDim.height = tableHeader.getHeight();
            headerDim.width = tableWidth;
            tableHeader.setPreferredSize(headerDim); // Header only set width

            Dimension tableDim = new Dimension(); // For seting the whole table
            int rowHeight = aTable.getRowHeight();
            if (rowHeight == 0)
                rowHeight = 16; // default rowheight
            //System.out.println("Row Height : " + rowHeight);
            //tableDim.height = headerDim.height + (rowHeight + cellSpacing.height) * aTable.getRowCount();
            tableDim.width = tableWidth;
            //System.out.println("AutofitTableColumns.autoResizeTable() - Setting Table size to ( " + tableDim.width + ", " + tableDim.height + " )" );
            //aTable.setPreferredSize(tableDim);
            TableColumnModel tableColumnModel = aTable.getColumnModel();
            TableColumn tableColumn;
            for (int i = 0; i < columnCount; i++) {
                tableColumn = tableColumnModel.getColumn(i);
                tableColumn.setPreferredWidth(columnWidth[i]);
            }
            aTable.invalidate();
            aTable.doLayout();
            aTable.repaint();
        }
        return tableWidth;
    }

    private static int getMaxColumnWidth(JTable aTable, int columnNo,
            boolean includeColumnHeaderWidth, int columnPadding) {
        TableColumn column = aTable.getColumnModel().getColumn(columnNo);
        Component comp = null;
        int maxWidth = 0;
        if (includeColumnHeaderWidth) {
            TableCellRenderer headerRenderer = column.getHeaderRenderer();
            if (headerRenderer != null) {
                comp = headerRenderer.getTableCellRendererComponent(aTable,
                        column.getHeaderValue(), false, false, 0, columnNo);
                if (comp instanceof JTextComponent) {
                    JTextComponent jtextComp = (JTextComponent) comp;
                    String text = jtextComp.getText();
                    Font font = jtextComp.getFont();
                    FontMetrics fontMetrics = jtextComp
                            .getFontMetrics(font);
                    maxWidth = SwingUtilities.computeStringWidth(
                            fontMetrics, text);
                } else {
                    maxWidth = comp.getPreferredSize().width;
                }
            } else {
                try {
                    String headerText = (String) column.getHeaderValue();
                    JLabel defaultLabel = new JLabel(headerText);
                    Font font = defaultLabel.getFont();
                    FontMetrics fontMetrics = defaultLabel
                            .getFontMetrics(font);
                    maxWidth = SwingUtilities.computeStringWidth(
                            fontMetrics, headerText);
                } catch (ClassCastException ce) {
                    // Can't work out the header column width..
                    maxWidth = 0;
                }
            }
        }
        TableCellRenderer tableCellRenderer;
        // Component comp;
        int cellWidth = 0;
        for (int i = 0; i < aTable.getRowCount(); i++) {
            tableCellRenderer = aTable.getCellRenderer(i, columnNo);
            comp = tableCellRenderer.getTableCellRendererComponent(aTable,
                    aTable.getValueAt(i, columnNo), false, false, i,
                    columnNo);
            if (comp instanceof JTextComponent) {
                JTextComponent jtextComp = (JTextComponent) comp;
                String text = jtextComp.getText();
                Font font = jtextComp.getFont();
                FontMetrics fontMetrics = jtextComp.getFontMetrics(font);
                int textWidth = SwingUtilities.computeStringWidth(
                        fontMetrics, text);
                maxWidth = Math.max(maxWidth, textWidth);
            } else {
                cellWidth = comp.getPreferredSize().width;
                // maxWidth = Math.max ( headerWidth, cellWidth );
                maxWidth = Math.max(maxWidth, cellWidth);
            }
        }
        return (maxWidth + columnPadding);
    }
}

Related Tutorials