自适应调整表格列宽,自适应表格列宽,自适应调整表格列宽自适应
分享于 点击 223 次 点评:160
自适应调整表格列宽,自适应表格列宽,自适应调整表格列宽自适应
自适应调整表格列宽
自适应调整表格列宽
public class ColumnResizer { public static void adjustColumnPreferredWidths(JTable table) { // strategy - get max width for cells in column and // make that the preferred width TableColumnModel columnModel = table.getColumnModel(); for (int col=0; col<table.getColumnCount(); col++) { int maxwidth = 0; for (int row=0; row<table.getRowCount(); row++) { TableCellRenderer rend = table.getCellRenderer(row, col); Object value = table.getValueAt (row, col); Component comp = rend.getTableCellRendererComponent (table, value, false, false, row, col); maxwidth = Math.max (comp.getPreferredSize().width, maxwidth); } // for row //TableColumn column = columnModel.getColumn (col); //column.setPreferredWidth (maxwidth); TableColumn column = columnModel.getColumn (col); TableCellRenderer headerRenderer = column.getHeaderRenderer(); if (headerRenderer == null) headerRenderer = table.getTableHeader().getDefaultRenderer(); Object headerValue = column.getHeaderValue(); Component headerComp = headerRenderer.getTableCellRendererComponent (table, headerValue, false, false, 0, col); maxwidth = Math.max (maxwidth, headerComp.getPreferredSize().width); column.setPreferredWidth (maxwidth); } // for col } }
测试调整表格列宽的程序
public class TestColumnResizer { final static Object[][] TABLE_DATA = { {new Integer(1), "ONJava", "http://www.onjava.com/"}, {new Integer(2), "Joshy's Site", "http://www.joshy.org/"}, {new Integer(3), "Anime Weekend Atlanta", "http://www.awa-con.com/"}, {new Integer(4), "QTJ book", "http://www.oreilly.com/catalog/quicktimejvaadn/"} }; final static String[] COLUMN_NAMES = { "Count", "Name", "URL" }; public static void main (String[] args) { // 142 mac l&f has a header bug - force metal for today try { UIManager.setLookAndFeel ( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace();} DefaultTableModel mod = new DefaultTableModel (TABLE_DATA, COLUMN_NAMES); JTable table = new JTable (mod); JScrollPane pane = new JScrollPane (table, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); JFrame frame = new JFrame ("JTable Column Widths"); frame.getContentPane().add (pane); frame.pack(); frame.setVisible (true); try { Thread.sleep (5000); } catch (Exception e) { e.printStackTrace(); } // now get smart about col widths final JTable fTable = table; SwingUtilities.invokeLater(new Runnable() { public void run() { ColumnResizer.adjustColumnPreferredWidths (fTable); fTable.revalidate(); } }); } } }
用户点评