rendered paste body private void buildTable() { tableModel = new JTableModel(rows, columns, extras); tableColumnModel = new WarpTableColumnModel(extras); TableSorter sortedModel = new TableSorter(tableModel); table = new JTable(sortedModel, tableColumnModel); table.createDefaultColumnsFromModel(); sortedModel.setTableHeader(table.getTableHeader()); TableCellRenderer defaultRenderer = table.getDefaultRenderer(JButton.class); table.setDefaultRenderer(JButton.class, new JTableRenderer(defaultRenderer)); JTableButtonMouseListener mouse = new JTableButtonMouseListener(this, table); table.addMouseListener(mouse); table.addMouseMotionListener(mouse); table.setColumnSelectionAllowed(false); table.setRowSelectionAllowed(false); table.setEnabled(false); limitColumnWidths(); scroll = new JScrollPane(table); this.add(scroll, BorderLayout.CENTER); validate(); if (scrollValue == -1) { saveScrollValue(); } else { restoreScrollValue(); } validate(); } public void limitColumnWidths() { switch (tabelltype) { case RESSURS: limitWidthOfColumn(0); limitWidthOfColumn(1); limitWidthOfColumn(3); limitWidthOfColumn(4); limitWidthOfColumn(5); limitWidthOfColumn(6); limitWidthOfColumn(7); break; case BEHOV: limitWidthOfColumn(0); limitWidthOfColumn(1); limitWidthOfColumn(3); limitWidthOfColumn(4); limitWidthOfColumn(5); limitWidthOfColumn(6); limitWidthOfColumn(7); limitWidthOfColumn(8); break; case OBSERVASJON: limitWidthOfColumn(0); limitWidthOfColumn(2); limitWidthOfColumn(3); limitWidthOfColumn(4); break; case PERSON: limitWidthOfColumn(0); limitWidthOfColumn(1); limitWidthOfColumn(2); limitWidthOfColumn(3); limitWidthOfColumn(4); limitWidthOfColumn(5); limitWidthOfColumn(6); break; } } private void limitWidthOfColumn(int columnNumber) { FontMetrics tableFont = getFontMetrics(table.getFont()); FontMetrics headerFont = getFontMetrics(table.getTableHeader().getFont()); int minWidth = headerFont.stringWidth((String)columns.elementAt(columnNumber)) + 10; int maxWidth = minWidth; int widthFix = 10; for (Object row : rows) { String s = (String)((Vector)row).elementAt(columnNumber); if (tableFont.stringWidth(s) + widthFix > maxWidth) { maxWidth = tableFont.stringWidth(s) + widthFix; } } TableColumn tc = table.getColumnModel().getColumn(columnNumber); tc.setPreferredWidth(maxWidth); tc.setMaxWidth(maxWidth); tc.setMinWidth(minWidth); }}class JTableRenderer implements TableCellRenderer { private TableCellRenderer __defaultRenderer; public JTableRenderer(TableCellRenderer renderer) { __defaultRenderer = renderer; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value instanceof Component) return (Component) value; return __defaultRenderer.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column); }}class WarpTableColumnModel extends DefaultTableColumnModel { int extras; public WarpTableColumnModel(int extras) { super(); this.extras = extras; } public TableColumn getColumn(int columnIndex) { TableColumn tc = super.getColumn(columnIndex); if (extras != WarpTable.NONE && columnIndex == getColumnCount()-1) { switch (extras) { case WarpTable.CHECKBOXES: tc.setPreferredWidth(33); tc.setMaxWidth(33); tc.setMinWidth(33); break; default: tc.setPreferredWidth(75); tc.setMaxWidth(75); tc.setMinWidth(75); } } return tc; }}