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