001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.corrector; 003 004 import java.awt.Component; 005 import java.awt.Dimension; 006 import java.awt.Font; 007 008 import javax.swing.JLabel; 009 import javax.swing.JTable; 010 import javax.swing.table.TableCellRenderer; 011 012 public abstract class CorrectionTable<TM extends CorrectionTableModel<?>> 013 extends JTable { 014 015 private static final int MAX_VISIBLE_LINES = 10; 016 017 public static class BoldRenderer extends JLabel implements 018 TableCellRenderer { 019 020 public Component getTableCellRendererComponent(JTable table, 021 Object value, boolean isSelected, boolean hasFocus, int row, 022 int column) { 023 024 Font f = getFont(); 025 setFont(new Font(f.getName(), f.getStyle() | Font.BOLD, f.getSize())); 026 027 setText((String)value); 028 029 return this; 030 } 031 } 032 033 private static BoldRenderer boldRenderer = null; 034 035 protected CorrectionTable(TM correctionTableModel) { 036 super(correctionTableModel); 037 038 final int correctionsSize = correctionTableModel.getCorrections().size(); 039 final int lines = correctionsSize > MAX_VISIBLE_LINES ? MAX_VISIBLE_LINES 040 : correctionsSize; 041 setPreferredScrollableViewportSize(new Dimension(400, lines 042 * getRowHeight())); 043 getColumnModel().getColumn(correctionTableModel.getApplyColumn()) 044 .setPreferredWidth(40); 045 setRowSelectionAllowed(false); 046 } 047 048 public TableCellRenderer getCellRenderer(int row, int column) { 049 if (getCorrectionTableModel().isBoldCell(row, column)) { 050 if (boldRenderer == null) 051 boldRenderer = new BoldRenderer(); 052 return boldRenderer; 053 } 054 return super.getCellRenderer(row, column); 055 } 056 057 @SuppressWarnings("unchecked") 058 public TM getCorrectionTableModel() { 059 return (TM)getModel(); 060 } 061 062 }