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 / date / JDateCalendarDynFieldComponent.java @ 270

History | View | Annotate | Download (7.08 KB)

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

    
3
import java.awt.BorderLayout;
4
import java.awt.Color;
5
import java.awt.Component;
6
import java.awt.event.ActionEvent;
7
import java.awt.event.ActionListener;
8
import java.awt.event.FocusEvent;
9
import java.awt.event.FocusListener;
10
import java.util.Calendar;
11
import java.util.Date;
12
import java.util.Locale;
13

    
14
import javax.swing.BorderFactory;
15
import javax.swing.Box;
16
import javax.swing.BoxLayout;
17
import javax.swing.JButton;
18
import javax.swing.JComponent;
19
import javax.swing.JDialog;
20
import javax.swing.JFormattedTextField;
21
import javax.swing.JPanel;
22
import javax.swing.JSpinner;
23
import javax.swing.JTextField;
24
import javax.swing.event.DocumentEvent;
25
import javax.swing.event.DocumentListener;
26

    
27
import org.freixas.jcalendar.DateEvent;
28
import org.freixas.jcalendar.DateListener;
29
import org.gvsig.tools.dataTypes.DataTypes;
30
import org.gvsig.tools.dynobject.DynField;
31
import org.gvsig.tools.service.ServiceException;
32
import org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent;
33
import org.gvsig.tools.swing.api.dynobject.dynfield.ValueField;
34
import org.gvsig.tools.swing.serv.field.component.spinner.DateTextFieldFormatter;
35
import org.gvsig.tools.swing.serv.field.component.spinner.NullDateEditor;
36
import org.gvsig.tools.swing.spi.AbstractJDynFieldComponent;
37

    
38
public class JDateCalendarDynFieldComponent extends AbstractJDynFieldComponent
39
    implements JDynFieldComponent, ActionListener, FocusListener {
40

    
41
    private JButton jBtnChangeDate;
42
    private DateSpinner dateField;
43
    private DateCalendarPicker datePicker;
44
    private JDialog dlg;
45
    private JPanel pane;
46

    
47
    public JDateCalendarDynFieldComponent(ValueField value, DynField dynField)
48
        throws ServiceException {
49
        super(dynField, value);
50
        // for (FocusListener listener :
51
        // getTextField().getListeners(FocusListener.class)){
52
        // getTextField().removeFocusListener(listener);
53
        // }
54
        getTextField().addFocusListener(this);
55
        // .agetTextField().getDocument().addDocumentListener( new
56
        // DocumentListener(){
57
        //
58
        // public void changedUpdate(DocumentEvent e) {
59
        // validate();
60
        // }
61
        //
62
        // public void insertUpdate(DocumentEvent e) {
63
        // validate();
64
        // }
65
        //
66
        // public void removeUpdate(DocumentEvent e) {
67
        // validate();
68
        // }});
69
    }
70

    
71
    /**
72
     * This method initializes jButton
73
     * 
74
     * @return javax.swing.JButton
75
     */
76
    public JButton getJBtnChangeDate() {
77
        if (jBtnChangeDate == null) {
78
            jBtnChangeDate = new JButton();
79
            jBtnChangeDate.setText("..."); //$NON-NLS-1$
80
            jBtnChangeDate.setPreferredSize(new java.awt.Dimension(26, 26));
81
        }
82
        return jBtnChangeDate;
83
    }
84

    
85
    private DateSpinner getDateField() {
86
        if (this.dateField == null)
87
            this.dateField = new DateSpinner(DataTypes.DATE);
88
        return this.dateField;
89
    }
90

    
91
    private void initBtnChangeDate() {
92
        if (datePicker == null) {
93
            datePicker =
94
                new DateCalendarPicker(this.getDate(), pane.getLocale());
95
            datePicker.setPreferredSize(new java.awt.Dimension(450, 410));
96
            // datePicker.setSize(datePicker.getPreferredSize());
97
            datePicker.addButtonsActionListener(this);
98
        }
99
        getJBtnChangeDate().addActionListener(new ActionListener() {
100

    
101
            public void actionPerformed(ActionEvent e) {
102
                datePicker.setSelectedDate(getDate());
103
                dlg = new JDialog();
104
                dlg.add(datePicker);
105
                dlg.setSize(datePicker.getPreferredSize());
106
                dlg.setVisible(true);
107
            }
108
        });
109
    }
110

    
111
    private Date getDate() {
112
        return (Date) getValue();
113
    }
114

    
115
    public void createBoxLayout(Component labelComponent, Component fieldLabel,
116
        Integer marginLeft, Integer marginRight) {
117

    
118
        // Create a panel that uses GridLayout.
119
        pane.setLayout(new BoxLayout(pane, BoxLayout.LINE_AXIS));
120
        pane.add(labelComponent);
121
        if (marginLeft != null)
122
            pane.add(Box.createHorizontalStrut(marginLeft));
123
        // this.add(new JSeparator(SwingConstants.VERTICAL));
124
        if (marginRight != null)
125
            pane.add(Box.createHorizontalStrut(marginRight));
126
        pane.add(fieldLabel, BorderLayout.NORTH);
127
        // if (buttonComponent!=null)
128
        // this.add(buttonComponent);
129
        pane.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
130
    }
131

    
132
    public void dateChanged(DateEvent dateEvent) {
133
        Calendar cal = dateEvent.getSelectedDate();
134
        if (cal != null) {
135
            this.getDateField().setValue(null);
136
        } else {
137
            this.getDateField().setValue(cal.getTime());
138
        }
139
        dlg.setVisible(false);
140

    
141
    }
142

    
143
    @Override
144
    protected void setJDynFieldComponentListeners() {
145
    }
146

    
147
    @Override
148
    protected void setNonNullValue(Object value) {
149
        this.dateField.setValue(value);
150
    }
151

    
152
    @Override
153
    protected void setNullValue() {
154
        this.dateField.setValue(null);
155
    }
156

    
157
    @Override
158
    protected void afterUI() {
159
        // TODO Auto-generated method stub
160

    
161
    }
162

    
163
    @Override
164
    protected void initData() {
165
        // TODO Auto-generated method stub
166

    
167
    }
168

    
169
    @Override
170
    protected void initUI() {
171
        pane = new JPanel();
172
        pane.setLocale(Locale.getDefault());
173
        createBoxLayout(getDateField(), getJBtnChangeDate(), 3, 1);
174
        initBtnChangeDate();
175
    }
176

    
177
    @Override
178
    protected void setReadOnly() {
179
        this.dateField.setEditable(false);
180
        this.getJBtnChangeDate().setVisible(false);
181
    }
182

    
183
    public void requestFocus() {
184
        this.getDateField().requestFocus();
185
    }
186

    
187
    public void setEnabled(boolean isEnabled) {
188
        this.pane.setEnabled(isEnabled);
189
    }
190

    
191
    public JFormattedTextField getTextField() {
192
        return ((NullDateEditor) this.getDateField().getEditor())
193
            .getTextField();
194
    }
195

    
196
    public DateFormatter getFormat() {
197
        return (DateFormatter) ((NullDateEditor) this.getDateField()
198
            .getEditor()).getFormat();
199
    }
200

    
201
    public Object getValue() {
202
        String txt = getTextField().getText();
203
        if ((txt == null) || (txt.equals("")))
204
            return null;
205
        return getFormat().parse(txt);
206
    }
207

    
208
    public JComponent asJComponent() {
209
        return pane;
210
    }
211

    
212
    public void actionPerformed(ActionEvent e) {
213
        JButton btn = (JButton) e.getSource();
214
        if (btn.getActionCommand().equals("BTN_OK")) {
215
            this.getDateField().setValue(datePicker.getSelectedDate());
216
        }
217
        dlg.setVisible(false);
218
    }
219

    
220
    public void focusGained(FocusEvent e) {
221

    
222
    }
223

    
224
    public void focusLost(FocusEvent e) {
225
        JFormattedTextField tf = (JFormattedTextField) e.getSource();
226
        Date date = getFormat().parse(tf.getText());
227
        if (date == null) {
228
            tf.setText("");
229
        }
230
    }
231
}