import
java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class FixTableColumnWidthFrame extends JFrame {
Object[] columnNames_ = { " First Name " , " MI " , " Last Name " } ;
Object[][] names_ = {
{ " Lynn " , " M. " , " Seckinger " } ,
{ " Carol " , " R. " , " Seckinger " } ,
{ " Roy " , " D. " , " Martin " } ,
{ " Bill " , " O. " , " Veryveryveryverylonglastname " } ,
{ " Richard " , " A. " , " Tattersall " } ,
{ " Philip " , " B. " , " Edwards " } ,
{ " Moore " , " T. " , " Moore " } ,
// shorten scrollbar grip with these
{ " Lynn " , " M. " , " Seckinger " } ,
{ " Carol " , " R. " , " Seckinger " } ,
{ " Roy " , " D. " , " Martin " } ,
{ " Bill " , " O. " , " Veryveryveryverylonglastname " } ,
{ " Richard " , " A. " , " Tattersall " } ,
{ " Philip " , " B. " , " Edwards " } ,
{ " Moore " , " T. " , " Moore " } ,
} ;
JTable table_ = new JTable(names_, columnNames_);
public FixTableColumnWidthFrame() {
TableUtilities.fixTableColumnWidth(table_);
JScrollPane scroll = new JScrollPane(table_);
// scroll.setPreferredSize(table_.getPreferredSize());
getContentPane().add(scroll, BorderLayout.CENTER);
pack();
}
public static void main(String args[]) {
FixTableColumnWidthFrame frame = new FixTableColumnWidthFrame();
frame.setTitle( " Setting Column Widths " );
frame.pack();
frame.show();
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.addWindowListener( new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.exit( 0 );
}
} );
}
}
class TableUtilities {
public static Dimension fixTableColumnWidth(JTable table) {
int MaxWidth = 0 ;
int width = 0 ;
for ( int i = 0 ; i < table.getColumnCount(); i ++ ) {
TableColumn col = table.getColumn(table.getColumnName(i));
width = getPreferredWidthForColumn(table, col);
col.setMinWidth(width);
col.setMaxWidth(width);
MaxWidth += width;
}
// sizeColumnsToFit() must be called due to a JTable
// bug
table.sizeColumnsToFit( 0 );
Dimension tableSize = new Dimension(MaxWidth, table.getPreferredSize().height);
table.setPreferredSize(tableSize);
return tableSize;
}
public static int getPreferredWidthForColumn(JTable table, TableColumn col) {
int hw = columnHeaderWidth(table, col), // hw = header width
cw = widestCellInColumn(table, col); // cw = column width
return hw > cw ? hw : cw;
}
private static int columnHeaderWidth(JTable table, TableColumn col) {
TableCellRenderer renderer = col.getHeaderRenderer();
if (renderer == null ) {
renderer = new DefaultTableCellRenderer();
((DefaultTableCellRenderer)renderer).setText(col.getHeaderValue().toString());
}
Component comp = renderer.getTableCellRendererComponent(
table, col.getHeaderValue(),
false , false , 0 , 0 );
return comp.getPreferredSize().width + 2 ;
}
private static int widestCellInColumn(JTable table, TableColumn col) {
int c = col.getModelIndex(), width = 0 , maxw = 0 ;
for ( int r = 0 ; r < table.getRowCount(); ++ r) {
TableCellRenderer renderer =
table.getCellRenderer(r,c);
Component comp =
renderer.getTableCellRendererComponent(
table, table.getValueAt(r,c),
false , false , r, c);
width = comp.getPreferredSize().width + 2 ;
maxw = width > maxw ? width : maxw;
}
return maxw;
}
}
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class FixTableColumnWidthFrame extends JFrame {
Object[] columnNames_ = { " First Name " , " MI " , " Last Name " } ;
Object[][] names_ = {
{ " Lynn " , " M. " , " Seckinger " } ,
{ " Carol " , " R. " , " Seckinger " } ,
{ " Roy " , " D. " , " Martin " } ,
{ " Bill " , " O. " , " Veryveryveryverylonglastname " } ,
{ " Richard " , " A. " , " Tattersall " } ,
{ " Philip " , " B. " , " Edwards " } ,
{ " Moore " , " T. " , " Moore " } ,
// shorten scrollbar grip with these
{ " Lynn " , " M. " , " Seckinger " } ,
{ " Carol " , " R. " , " Seckinger " } ,
{ " Roy " , " D. " , " Martin " } ,
{ " Bill " , " O. " , " Veryveryveryverylonglastname " } ,
{ " Richard " , " A. " , " Tattersall " } ,
{ " Philip " , " B. " , " Edwards " } ,
{ " Moore " , " T. " , " Moore " } ,
} ;
JTable table_ = new JTable(names_, columnNames_);
public FixTableColumnWidthFrame() {
TableUtilities.fixTableColumnWidth(table_);
JScrollPane scroll = new JScrollPane(table_);
// scroll.setPreferredSize(table_.getPreferredSize());
getContentPane().add(scroll, BorderLayout.CENTER);
pack();
}
public static void main(String args[]) {
FixTableColumnWidthFrame frame = new FixTableColumnWidthFrame();
frame.setTitle( " Setting Column Widths " );
frame.pack();
frame.show();
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.addWindowListener( new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.exit( 0 );
}
} );
}
}
class TableUtilities {
public static Dimension fixTableColumnWidth(JTable table) {
int MaxWidth = 0 ;
int width = 0 ;
for ( int i = 0 ; i < table.getColumnCount(); i ++ ) {
TableColumn col = table.getColumn(table.getColumnName(i));
width = getPreferredWidthForColumn(table, col);
col.setMinWidth(width);
col.setMaxWidth(width);
MaxWidth += width;
}
// sizeColumnsToFit() must be called due to a JTable
// bug
table.sizeColumnsToFit( 0 );
Dimension tableSize = new Dimension(MaxWidth, table.getPreferredSize().height);
table.setPreferredSize(tableSize);
return tableSize;
}
public static int getPreferredWidthForColumn(JTable table, TableColumn col) {
int hw = columnHeaderWidth(table, col), // hw = header width
cw = widestCellInColumn(table, col); // cw = column width
return hw > cw ? hw : cw;
}
private static int columnHeaderWidth(JTable table, TableColumn col) {
TableCellRenderer renderer = col.getHeaderRenderer();
if (renderer == null ) {
renderer = new DefaultTableCellRenderer();
((DefaultTableCellRenderer)renderer).setText(col.getHeaderValue().toString());
}
Component comp = renderer.getTableCellRendererComponent(
table, col.getHeaderValue(),
false , false , 0 , 0 );
return comp.getPreferredSize().width + 2 ;
}
private static int widestCellInColumn(JTable table, TableColumn col) {
int c = col.getModelIndex(), width = 0 , maxw = 0 ;
for ( int r = 0 ; r < table.getRowCount(); ++ r) {
TableCellRenderer renderer =
table.getCellRenderer(r,c);
Component comp =
renderer.getTableCellRendererComponent(
table, table.getValueAt(r,c),
false , false , r, c);
width = comp.getPreferredSize().width + 2 ;
maxw = width > maxw ? width : maxw;
}
return maxw;
}
}