package com.towel.swing.table;
import java.awt.Component;
import java.awt.FontMetrics;
import javax.swing.JTable;
import javax.swing.table.TableColumn;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
/**
*
*
* @author Arthur Gregorio
* @version 1.0.0
* @since Release 1.0.0
*/
public class Resizer {
/**
* Método que ajuasta a coluna conforme da JTable conforme o tamanho do
* conteúdo carregado no model
*
* @param coluna
* Recebe a coluna que sera redimensionada
* @param margin
* espaço de bonus colocado caso a contagem dos campos esteja
* errada
* @param tabela
* tabela que será implementada o redimensionamento
*/
public static void fitColumn(int coluna, int margin, JTable tabela) {
int width = 0;
TableColumnModel colModel = tabela.getColumnModel();
TableColumn col = colModel.getColumn(coluna);
/** Obtem a largura do cabecalho */
TableCellRenderer renderer = col.getHeaderRenderer();
if (renderer == null) {
renderer = tabela.getTableHeader().getDefaultRenderer();
}
Component comp = renderer.getTableCellRendererComponent(tabela,
col.getHeaderValue(), false, false, 0, 0);
width = comp.getPreferredSize().width;
for (int r = 0; r < tabela.getRowCount(); r++) {
renderer = tabela.getCellRenderer(r, coluna);
comp = renderer.getTableCellRendererComponent(tabela,
tabela.getValueAt(r, coluna), false, false, r, coluna);
width = Math.max(width, comp.getPreferredSize().width);
}
width += 2 * margin;
col.setPreferredWidth(width);
}
public static void fitColumnsByHeader(int margin, JTable table) {
TableColumnModel colModel = table.getColumnModel();
for (int i = 0; i < colModel.getColumnCount(); i++)
fitColumnByHeader(i, margin, table);
}
public static void fitColumnByHeader(int column, int margin, JTable table) {
TableColumnModel colModel = table.getColumnModel();
TableColumn col = colModel.getColumn(column);
String x = col.getHeaderValue().toString();
FontMetrics metrics = table.getFontMetrics(table.getFont());
int width = metrics.stringWidth(x);
col.setMinWidth(width);
// col.setPreferredWidth(width);
}
public static void fitAllColumns(JTable table) {
TableColumnModel colModel = table.getColumnModel();
for (int i = 0; i < colModel.getColumnCount(); i++)
fitColumn(i, 0, table);
}
}