001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.correction; 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 012/** 013 * Abstract correction table. 014 * @param <T> type of table model 015 */ 016public abstract class CorrectionTable<T extends CorrectionTableModel<?>> extends JTable { 017 018 private static final int MAX_VISIBLE_LINES = 10; 019 020 /** 021 * Renders text in bold. 022 */ 023 public static class BoldRenderer extends JLabel implements TableCellRenderer { 024 025 @Override 026 public Component getTableCellRendererComponent(JTable table, 027 Object value, boolean isSelected, boolean hasFocus, int row, int column) { 028 Font f = getFont(); 029 setFont(new Font(f.getName(), f.getStyle() | Font.BOLD, f.getSize())); 030 setText((String) value); 031 return this; 032 } 033 } 034 035 private static volatile BoldRenderer boldRenderer; 036 037 protected CorrectionTable(T correctionTableModel) { 038 super(correctionTableModel); 039 040 final int correctionsSize = correctionTableModel.getCorrections().size(); 041 final int lines = correctionsSize > MAX_VISIBLE_LINES ? MAX_VISIBLE_LINES : correctionsSize; 042 setPreferredScrollableViewportSize(new Dimension(400, lines * getRowHeight())); 043 getColumnModel().getColumn(correctionTableModel.getApplyColumn()).setPreferredWidth(40); 044 setRowSelectionAllowed(false); 045 } 046 047 @Override 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 /** 058 * Returns correction table model. 059 * @return correction table model 060 */ 061 @SuppressWarnings("unchecked") 062 public T getCorrectionTableModel() { 063 return (T) getModel(); 064 } 065}