package com.revolsys.swing.table.record.renderer; import java.awt.Color; import java.awt.Component; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; import javax.swing.table.TableCellRenderer; import org.jdesktop.swingx.JXTable; import com.revolsys.record.schema.RecordDefinition; import com.revolsys.swing.SwingUtil; import com.revolsys.swing.table.record.model.AbstractSingleRecordTableModel; import com.revolsys.util.number.BigDecimals; public class SingleRecordTableCellRenderer implements TableCellRenderer { private final JLabel labelComponent = new JLabel(); private final JLabel valueComponent = new JLabel(); public SingleRecordTableCellRenderer() { this.labelComponent.setFont(SwingUtil.BOLD_FONT); this.labelComponent.setOpaque(true); this.valueComponent.setFont(SwingUtil.FONT); this.valueComponent.setOpaque(true); } @Override public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected, final boolean hasFocus, int rowIndex, int columnIndex) { if (table instanceof JXTable) { final JXTable jxTable = (JXTable)table; rowIndex = jxTable.convertRowIndexToModel(rowIndex); columnIndex = jxTable.convertColumnIndexToModel(columnIndex); } final AbstractSingleRecordTableModel model = (AbstractSingleRecordTableModel)table.getModel(); final RecordDefinition recordDefinition = model.getRecordDefinition(); JComponent component = null; final String name = model.getColumnFieldName(rowIndex, columnIndex); final boolean required = recordDefinition.isFieldRequired(name); this.valueComponent.setBorder(new EmptyBorder(1, 2, 1, 2)); if (columnIndex == 0) { this.valueComponent.setText(String.valueOf(rowIndex + 1)); this.valueComponent.setHorizontalAlignment(SwingConstants.RIGHT); this.valueComponent.setHorizontalTextPosition(SwingConstants.RIGHT); component = this.valueComponent; } else if (columnIndex == 1) { final String title = model.getFieldTitle(name); this.labelComponent.setText(title); this.labelComponent.setBorder(new EmptyBorder(1, 2, 1, 2)); component = this.labelComponent; } else { final String text = model.toDisplayValue(rowIndex, rowIndex, value); this.valueComponent.setText(text); if (BigDecimals.isNumber(text)) { this.valueComponent.setHorizontalAlignment(SwingConstants.RIGHT); this.valueComponent.setHorizontalTextPosition(SwingConstants.RIGHT); } else { this.valueComponent.setHorizontalAlignment(SwingConstants.LEFT); this.valueComponent.setHorizontalTextPosition(SwingConstants.LEFT); } component = this.valueComponent; } if (required && model.getObjectValue(rowIndex, columnIndex) == null) { component.setBackground(new Color(255, 0, 0, 100)); component.setForeground(table.getForeground()); } component.setToolTipText(null); return component; } }