Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.impl / src / main / java / org / gvsig / tools / swing / impl / pickercontroller / nullablespinner / NullableTimeEditor.java @ 2491

History | View | Annotate | Download (2.85 KB)

1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.tools.swing.impl.pickercontroller.nullablespinner;
7

    
8
import java.text.DateFormat;
9
import java.text.ParseException;
10
import java.text.SimpleDateFormat;
11
import java.util.Locale;
12
import javax.swing.JFormattedTextField;
13
import javax.swing.JSpinner;
14
import javax.swing.SpinnerDateModel;
15
import javax.swing.text.DateFormatter;
16
import javax.swing.text.DefaultFormatterFactory;
17
import org.apache.commons.lang3.StringUtils;
18

    
19
/**
20
 *
21
 * @author jjdelcerro
22
 */
23
public class NullableTimeEditor extends NullableEditor {
24

    
25
    private static String getDefaultPattern(String pattern, Locale loc) {
26
        if( StringUtils.isNotBlank(pattern)) {
27
            return pattern;
28
        }
29
        if( loc == null ) {
30
            loc = Locale.getDefault();
31
        }
32
        SimpleDateFormat df = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.SHORT, loc);
33
        return df.toPattern();
34
    }
35

    
36
    public NullableTimeEditor(JSpinner spinner) {
37
        this(spinner, "hh:mm a", null);
38
    }
39

    
40
    public NullableTimeEditor(JSpinner spinner, Locale locale) {
41
        this(spinner, "hh:mm a", locale);
42
    }
43

    
44
    public NullableTimeEditor(JSpinner spinner, String pattern) {
45
        this(spinner, "hh:mm a", null);
46
    }
47

    
48
    public NullableTimeEditor(JSpinner spinner, String pattern, Locale locale) {
49
        this(
50
                spinner, 
51
                new SimpleDateFormat(
52
                        getDefaultPattern(pattern, locale),
53
                        locale==null? Locale.getDefault():locale
54
                )
55
        );
56
    }
57

    
58
    private NullableTimeEditor(JSpinner spinner, DateFormat format) {
59
        super(spinner);
60
        if (!(spinner.getModel() instanceof SpinnerDateModel)) {
61
            throw new IllegalArgumentException(
62
                    "model not a SpinnerDateModel");
63
        }
64

    
65
        SpinnerDateModel model = (SpinnerDateModel) spinner.getModel();
66
        DateFormatter formatter = new NullableTimeEditorFormatter(model, format, getTextField());
67
        DefaultFormatterFactory factory = new DefaultFormatterFactory(formatter);
68
        JFormattedTextField ftf = getTextField();
69
        ftf.setEditable(true);
70
        ftf.setFormatterFactory(factory);
71

    
72
        try {
73
            String maxString = formatter.valueToString(model.getStart());
74
            String minString = formatter.valueToString(model.getEnd());
75
            ftf.setColumns(Math.max(maxString.length(), minString.length()));
76
        } catch (ParseException e) {
77

    
78
        }
79
    }
80

    
81
    public SimpleDateFormat getFormat() {
82
        return (SimpleDateFormat) ((DateFormatter) (getTextField().getFormatter())).getFormat();
83
    }
84

    
85
    public SpinnerDateModel getModel() {
86
        return (SpinnerDateModel) (getSpinner().getModel());
87
    }
88
}