/*
* ValueCellRenderer.java
*
* Created on 6 ������ 2006 �., 19:15
*
*/
package datechooser.beans.customizer.render;
import datechooser.beans.customizer.*;
import java.awt.*;
import java.beans.*;
import javax.swing.*;
/**
* Renderer for cells with property value.<br>
* ����������� ��� ����� �� ���������� �������.
* @author Androsov Vadim
* @since 1.0
*/
public class ValueCellRenderer extends CellRenderer {
private RenderPane paneRenderer;
private JLabel labelRenderer;
private JCheckBox checkRenderer;
private JComboBox comboRenderer;
private JButton editorButton;
private JPanel editorPane;
private Component rendererCash = null;
public ValueCellRenderer(PropertyDescriptorsHolder holder) {
super(holder);
paneRenderer = new RenderPane();
labelRenderer = new JLabel();
labelRenderer.setOpaque(true);
labelRenderer.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
checkRenderer = new JCheckBox();
comboRenderer = new JComboBox();
comboRenderer.setBorder(null);
editorButton = new JButton("...");
editorButton.setMargin(new Insets(2, 2, 2, 2));
editorPane = new JPanel(new BorderLayout());
editorPane.add(editorButton, BorderLayout.EAST);
UIManager.addPropertyChangeListener(new OnUIChange());
}
protected Component getRenderer(PropertyDescriptor propertyDescriptor, PropertyEditorSupport propertyEditorSupport, JTable table, boolean isSelected, boolean hasFocus) {
Component renderer = null;
if (PropertyDescriptorsHolder.isBooleanDescriptor(propertyDescriptor)) {
checkRenderer.setSelected((Boolean)propertyEditorSupport.getValue());
renderer = checkRenderer;
} else if (propertyEditorSupport.getTags() != null) {
comboRenderer.removeAllItems();
comboRenderer.addItem(propertyEditorSupport.getAsText());
renderer = comboRenderer;
} else if (propertyEditorSupport.isPaintable()) {
paneRenderer.setEditor(propertyEditorSupport);
renderer = paneRenderer;
} else {
String text = propertyEditorSupport.getAsText();
labelRenderer.setFont(table.getFont());
labelRenderer.setText(text);
renderer = labelRenderer;
}
renderer.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
renderer.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
if (propertyEditorSupport.supportsCustomEditor()) {
if (rendererCash != null) {
editorPane.remove(rendererCash);
}
editorPane.add(renderer, BorderLayout.CENTER);
rendererCash = renderer;
editorPane.revalidate();
return editorPane;
}
return renderer;
}
private class RenderPane extends JPanel {
private PropertyEditor editor = null;
public void setEditor(PropertyEditor editor) {
this.editor = editor;
setOpaque(true);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (editor == null) return;
Rectangle bounds = getBounds();
bounds.setLocation(5, 0);
editor.paintValue(g, bounds);
}
}
private class OnUIChange implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent evt) {
SwingUtilities.updateComponentTreeUI(editorPane);
comboRenderer.updateUI();
labelRenderer.updateUI();
checkRenderer.updateUI();
}
}
}