package org.ytoh.configurations.ui;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
import org.ytoh.configurations.Property;
import org.ytoh.configurations.PropertyState;
/**
*
* @author ytoh
*/
public class PropertyCellRenderer implements TableCellRenderer {
private Property property;
private JPanel panel;
public PropertyCellRenderer(Property property) {
this.property = property;
panel = new JPanel(new GridLayout(0,1));
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component rendererComponent = property.getRendererComponent();
if (isSelected) {
rendererComponent.setForeground(table.getSelectionForeground());
rendererComponent.setBackground(table.getSelectionBackground());
panel.setBackground(table.getSelectionBackground());
} else {
rendererComponent.setForeground(table.getForeground());
rendererComponent.setBackground(table.getBackground());
panel.setBackground(table.getBackground());
}
if(property.getPropertyState() == PropertyState.DISABLED) {
rendererComponent.setForeground(Color.gray);
}
panel.removeAll();
panel.add(rendererComponent);
for (String message : property.getViolationMessages()) {
JLabel label = new JLabel(message);
label.setForeground(Color.red);
panel.add(label);
}
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
if (table.getRowHeight(row) != panel.getPreferredSize().height) {
table.setRowHeight(row, panel.getPreferredSize().height);
}
return panel;
}
}