Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
/*
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with this program; if not, write to the Free Software
 *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

import java.awt.Component;

import javax.swing.JTable;

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

public class Main {
    private JTable jtable;

    /**
     * calcs the optimal column width of the given column
     */
    public int calcColumnWidth(int col) {
        return calcColumnWidth(getJTable(), col);
    }

    /**
     *  Calculates the optimal width for the column of the given table. The
     *  calculation is based on the preferred width of the header and cell
     *  renderer.
     *  <br>
     *  Taken from the newsgoup de.comp.lang.java with some modifications.<br>
     *  Taken from FOPPS/EnhancedTable - http://fopps.sourceforge.net/<br>
     *
     *  @param table    the table to calculate the column width
     *  @param col      the column to calculate the widths
     *  @return         the width, -1 if error
     */
    public static int calcColumnWidth(JTable table, int col) {
        int width = calcHeaderWidth(table, col);
        if (width == -1)
            return width;

        TableColumnModel columns = table.getColumnModel();
        TableModel data = table.getModel();
        int rowCount = data.getRowCount();
        TableColumn column = columns.getColumn(col);
        try {
            for (int row = rowCount - 1; row >= 0; --row) {
                Component c = table.prepareRenderer(table.getCellRenderer(row, col), row, col);
                width = Math.max(width, c.getPreferredSize().width + 10);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return width;
    }

    /**
     * returns the JTable
     */
    public JTable getJTable() {
        return jtable;
    }

    /**
     * calcs the optimal header width of the given column
     */
    public int calcHeaderWidth(int col) {
        return calcHeaderWidth(getJTable(), col);
    }

    /**
     *  Calculates the optimal width for the header of the given table. The
     *  calculation is based on the preferred width of the header renderer.
     *
     *  @param table    the table to calculate the column width
     *  @param col      the column to calculate the widths
     *  @return         the width, -1 if error
     */
    public static int calcHeaderWidth(JTable table, int col) {
        if (table == null)
            return -1;

        if (col < 0 || col > table.getColumnCount()) {
            System.out.println("invalid col " + col);
            return -1;
        }

        JTableHeader header = table.getTableHeader();
        TableCellRenderer defaultHeaderRenderer = null;
        if (header != null)
            defaultHeaderRenderer = header.getDefaultRenderer();
        TableColumnModel columns = table.getColumnModel();
        TableModel data = table.getModel();
        TableColumn column = columns.getColumn(col);
        int width = -1;
        TableCellRenderer h = column.getHeaderRenderer();
        if (h == null)
            h = defaultHeaderRenderer;
        if (h != null) {
            // Not explicitly impossible
            Component c = h.getTableCellRendererComponent(table, column.getHeaderValue(), false, false, -1, col);
            width = c.getPreferredSize().width + 5;
        }

        return width;
    }
}