Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.serv / org.gvsig.tools.swing.serv.field / src / main / java / org / gvsig / tools / swing / serv / field / component / spinner / DynFieldEditor.java @ 298

History | View | Annotate | Download (4.24 KB)

1
package org.gvsig.tools.swing.serv.field.component.spinner;
2

    
3
import java.util.Date;
4
import java.util.Locale;
5

    
6
import javax.swing.JFormattedTextField;
7
import javax.swing.JSpinner;
8
import javax.swing.SpinnerDateModel;
9
import javax.swing.SpinnerNumberModel;
10
import javax.swing.JFormattedTextField.AbstractFormatter;
11
import javax.swing.text.DateFormatter;
12
import javax.swing.text.DefaultFormatterFactory;
13
import javax.swing.text.NumberFormatter;
14

    
15
import org.gvsig.tools.dataTypes.DataTypes;
16
import org.gvsig.tools.dynobject.DynField;
17

    
18
public class DynFieldEditor {
19

    
20
    private DynField dynField;
21
    private DynFieldFormatter formatter;
22
    private JSpinner spinner;
23
    private JFormattedTextField tf;
24

    
25
    public DynFieldEditor(DynField field, Locale locale) {
26
        this.dynField = field;
27
        this.formatter = DynFieldFormatter.getInstance(dynField, locale);
28
        this.spinner = createSpinner();
29
        this.spinner.setLocale(locale);
30
        this.tf =
31
            ((JSpinner.DefaultEditor) this.spinner.getEditor()).getTextField();
32

    
33
        setDynFieldFormat();
34

    
35
        // this.spinner.validate();
36

    
37
        // setText(null);
38
    }
39

    
40
    private JSpinner createSpinner() {
41
        if (formatter.isDate()) {
42
            SpinnerDateModel dateModel = new SpinnerDateModel();
43
            dateModel.setStart((Comparable) dynField.getMinValue());
44
            dateModel.setEnd((Comparable) dynField.getMaxValue());
45
            return new JSpinner(dateModel);
46
        } else
47
            if (formatter.isNumber()) {
48
                SpinnerNumberModel numModel = new SpinnerNumberModel();
49
                numModel.setMinimum((Comparable) dynField.getMinValue());
50
                numModel.setMaximum((Comparable) dynField.getMaxValue());
51
                numModel.setStepSize(1);
52
                return new JSpinner(numModel);
53
            }
54
        return new JSpinner();
55
    }
56

    
57
    public Object getDefaultValue() {
58
        switch (this.dynField.getType()) {
59
        case DataTypes.DATE:
60
            return new Date();
61
        case DataTypes.TIME:
62
            return new Date();
63
        case DataTypes.TIMESTAMP:
64
            return new Date();
65
        case DataTypes.DOUBLE:
66
            return 0.0f;
67
        case DataTypes.FLOAT:
68
            return 0.0f;
69
        default:
70
            return 0;
71
        }
72
    }
73

    
74
    // public void init(){
75
    // this.setFormatterFactory();
76
    //  
77
    // this.getSpinner().setEditor(this);
78
    // getSpinner().setLocale(loc);
79
    // getSpinner().setModel(getModel());
80
    // }
81

    
82
    public DynFieldFormatter getFormat() {
83
        return this.formatter;
84
    }
85

    
86
    // private void setFormatterFactory() {
87
    // getTextField().setFormatterFactory(
88
    //
89
    // new DynFieldFormatterFactory(getFormat()));
90
    // }
91
    //
92
    // @Override
93
    // public void stateChanged(ChangeEvent e) {
94
    // JSpinner spinner = (JSpinner)(e.getSource());
95
    // Object value = model.getValue();
96
    // // setText(model.getValue());
97
    // // if (value!=null)
98
    // // this.getModel().setValue(value);
99
    // }
100
    //
101
    // public void setText(Object value) {
102
    // String txtValue = getFormat().format(value);
103
    // getTextField().setValue(txtValue);
104
    // getTextField().setText(txtValue);
105
    // }
106
    //    
107
    // public Object getValue(){
108
    // String text = getTextField().getText();
109
    // try {
110
    // return formatter.parse(text);
111
    // } catch (ParseException e) {
112
    // return null;
113
    // }
114
    // }
115

    
116
    public JSpinner getSpinner() {
117
        return this.spinner;
118
    }
119

    
120
    public JFormattedTextField getTextField() {
121
        return this.tf;
122
    }
123

    
124
    private void setDynFieldFormat() {
125
        DefaultFormatterFactory factory =
126
            (DefaultFormatterFactory) getTextField().getFormatterFactory();
127
        AbstractFormatter formatter = factory.getDefaultFormatter();
128

    
129
        if (this.formatter.isDate()) {
130
            // Change the date format
131
            ((DateFormatter) formatter).setFormat(this.formatter.toFormat());
132

    
133
        } else
134
            if (this.formatter.isNumber()) {
135
                // Change the date format
136
                ((NumberFormatter) formatter).setFormat(this.formatter
137
                    .toFormat());
138
            }
139
    }
140
}