/*
* DimensionEditorPane.java
*
* Created on 14 ������� 2006 �., 18:29
*
*/
package datechooser.beans.editor.dimension;
import static datechooser.beans.locale.LocaleUtils.getEditorLocaleString;
import java.awt.*;
import java.beans.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* Panel for dimension editor.<br>
* ������ ��������� ��������.
* @author Androsov Vadim
* @since 1.0
*/
class SimpleDimensionEditorPane extends JPanel {
private PropertyEditorSupport editor;
private Preview preview;
private JPanel controls;
public SimpleDimensionEditorPane(PropertyEditorSupport editor) {
this.editor = editor;
final Dimension dim = getValue();
final SpinnerNumberModel width = new SpinnerNumberModel(dim.width, 10, 20000, 1);
final SpinnerNumberModel height = new SpinnerNumberModel(dim.height, 10, 20000, 1);
controls = new JPanel(new GridLayout(1, 2));
JPanel widthPane = new JPanel(new FlowLayout(FlowLayout.CENTER));
JPanel heightPane = new JPanel(new FlowLayout(FlowLayout.CENTER));
widthPane.add(new JLabel(getEditorLocaleString("Width")));
widthPane.add(new JSpinner(width));
heightPane.add(new JLabel(getEditorLocaleString("Height")));
heightPane.add(new JSpinner(height));
controls.add(widthPane);
controls.add(heightPane);
controls.revalidate();
preview = new Preview();
setLayout(new BorderLayout());
add(preview, BorderLayout.CENTER);
add(controls, BorderLayout.SOUTH);
revalidate();
ChangeListener onChange = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
dim.setSize(width.getNumber().intValue(),
height.getNumber().intValue());
setValue(dim);
repaint();
}
};
width.addChangeListener(onChange);
height.addChangeListener(onChange);
}
private Dimension getValue() {
return (Dimension) editor.getValue();
}
private void setValue(Dimension value) {
editor.setValue(value);
}
private class Preview extends JPanel {
private Point startRec = new Point();
protected void paintComponent(Graphics g) {
Rectangle rec = getBounds();
Dimension dim = getValue();
if (dim.width < rec.width) {
startRec.x = (rec.width - dim.width) / 2;
} else {
startRec.x = 0;
}
if (dim.height < rec.height) {
startRec.y = (rec.height - dim.height) / 2;
} else {
startRec.y = 0;
}
g.setColor(Color.BLUE);
g.fillRect(startRec.x, startRec.y, dim.width, dim.height);
}
public Dimension getPreferredSize() {
return new Dimension(100, 200);
}
}
}