/*
* AbstractBorderEdit.java
*
* Created on 31 ���� 2006 �., 18:00
*
*/
package datechooser.beans.editor.border.types;
import datechooser.events.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
/**
* Abstract editor panel for some border type. <br>
* ��������� ��� ������ �������������� ������� ����������� ����.
* @author Androsov Vadim
* @since 1.0
*/
public abstract class AbstractBorderEditor extends JPanel {
protected Border value;
private String caption;
private boolean changed;
public static final String BORDER_EVENT_NAME = "border";
public AbstractBorderEditor() {
setCaption("");
setChanged(false);
}
public void fireChange() {
setChanged(true);
firePropertyChange(BORDER_EVENT_NAME, null, null);
}
protected Border getCurrentBorder() {
return value;
}
public void setCurrentBorder(Border border) {
setValue(border);
refreshInterface();
}
public Border getSelectedBorder() {
if (isChanged()) {
prepareSelection();
setChanged(false);
}
return getCurrentBorder();
}
public boolean isChanged() {
return changed;
}
public void setChanged(boolean changed) {
this.changed = changed;
}
public String getCaption() {
return caption;
}
protected void setCaption(String caption) {
this.caption = caption;
}
public String toString() {
return getCaption();
}
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
protected JPanel getCenteredPane(Component component) {
JPanel pane = new JPanel(new FlowLayout(FlowLayout.CENTER));
if (component != null) pane.add(component);
return pane;
}
public void initialize() {
if (value == null) {
value = getDefaultValue();
}
}
public void reset() {
setValue(getDefaultValue());
refreshInterface();
fireChange();
}
public void setValue(Border value) {
this.value = value;
}
public JLabel getPreviewLabel() {
JLabel label = new JLabel();
label.setBorder(value);
label.setText(getCaption());
label.setOpaque(false);
return label;
}
protected abstract Border getDefaultValue();
protected abstract void prepareSelection();
protected abstract void refreshInterface();
}