001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package javax.swing;
019:
020: import java.awt.Component;
021: import java.awt.event.ActionEvent;
022: import java.awt.event.ActionListener;
023: import java.awt.event.ItemEvent;
024: import java.awt.event.ItemListener;
025: import java.awt.event.MouseEvent;
026: import java.io.Serializable;
027: import java.util.EventObject;
028: import javax.swing.table.TableCellEditor;
029: import javax.swing.tree.TreeCellEditor;
030: import org.apache.harmony.x.swing.StringConstants;
031:
032: /**
033: * <p>
034: * <i>DefaultCellEditor</i>
035: * </p>
036: * <h3>Implementation Notes:</h3>
037: * <ul>
038: * <li>The <code>serialVersionUID</code> fields are explicitly declared as a performance
039: * optimization, not as a guarantee of serialization compatibility.</li>
040: * </ul>
041: */
042: public class DefaultCellEditor extends AbstractCellEditor implements
043: TableCellEditor, TreeCellEditor {
044: private static final long serialVersionUID = 3564035141373880027L;
045:
046: protected class EditorDelegate implements ActionListener,
047: ItemListener, Serializable {
048: private static final long serialVersionUID = -1953114537286696317L;
049:
050: protected Object value;
051:
052: public Object getCellEditorValue() {
053: return value;
054: }
055:
056: public void setValue(Object value) {
057: this .value = value;
058: }
059:
060: public boolean isCellEditable(EventObject event) {
061: if (event instanceof MouseEvent) {
062: return ((MouseEvent) event).getClickCount() >= clickCountToStart;
063: }
064: return true;
065: }
066:
067: public boolean shouldSelectCell(EventObject event) {
068: return true;
069: }
070:
071: public boolean startCellEditing(EventObject event) {
072: return true;
073: }
074:
075: public boolean stopCellEditing() {
076: fireEditingStopped();
077: return true;
078: }
079:
080: public void cancelCellEditing() {
081: fireEditingCanceled();
082: }
083:
084: public void actionPerformed(ActionEvent e) {
085: DefaultCellEditor.this .stopCellEditing();
086: }
087:
088: public void itemStateChanged(ItemEvent e) {
089: DefaultCellEditor.this .stopCellEditing();
090: }
091: }
092:
093: protected JComponent editorComponent;
094:
095: protected EditorDelegate delegate;
096:
097: protected int clickCountToStart;
098:
099: public DefaultCellEditor(final JTextField textField) {
100: editorComponent = textField;
101: delegate = new EditorDelegate() {
102: private static final long serialVersionUID = 1L;
103:
104: @Override
105: public Object getCellEditorValue() {
106: return textField.getText();
107: }
108:
109: @Override
110: public void setValue(Object value) {
111: textField.setText(value != null ? value.toString()
112: : null);
113: }
114: };
115: textField.addActionListener(delegate);
116: setClickCountToStart(2);
117: }
118:
119: public DefaultCellEditor(final JCheckBox checkBox) {
120: editorComponent = checkBox;
121: delegate = new EditorDelegate() {
122: private static final long serialVersionUID = 1L;
123:
124: @Override
125: public Object getCellEditorValue() {
126: return Boolean.valueOf(checkBox.isSelected());
127: }
128:
129: @Override
130: public void setValue(Object value) {
131: checkBox.setSelected(value != null ? Boolean
132: .parseBoolean(value.toString()) : false);
133: }
134: };
135: checkBox.setFocusable(false);
136: checkBox.addActionListener(delegate);
137: setClickCountToStart(1);
138: }
139:
140: public DefaultCellEditor(final JComboBox comboBox) {
141: editorComponent = comboBox;
142: delegate = new EditorDelegate() {
143: private static final long serialVersionUID = 1L;
144:
145: @Override
146: public Object getCellEditorValue() {
147: return comboBox.getSelectedItem();
148: }
149:
150: @Override
151: public void setValue(Object value) {
152: comboBox.setSelectedItem(value);
153: }
154: };
155: comboBox.addActionListener(delegate);
156: setClickCountToStart(1);
157: comboBox.putClientProperty(StringConstants.IS_TABLE_EDITOR,
158: Boolean.TRUE);
159: }
160:
161: public Component getComponent() {
162: return editorComponent;
163: }
164:
165: public void setClickCountToStart(int count) {
166: clickCountToStart = count;
167: }
168:
169: public int getClickCountToStart() {
170: return clickCountToStart;
171: }
172:
173: public Object getCellEditorValue() {
174: return delegate.getCellEditorValue();
175: }
176:
177: @Override
178: public boolean isCellEditable(EventObject event) {
179: return delegate.isCellEditable(event);
180: }
181:
182: @Override
183: public boolean shouldSelectCell(EventObject event) {
184: return delegate.shouldSelectCell(event);
185: }
186:
187: @Override
188: public boolean stopCellEditing() {
189: return delegate.stopCellEditing();
190: }
191:
192: @Override
193: public void cancelCellEditing() {
194: delegate.cancelCellEditing();
195: }
196:
197: public Component getTreeCellEditorComponent(JTree tree,
198: Object value, boolean isSelected, boolean expanded,
199: boolean leaf, int row) {
200: delegate.setValue(value);
201: return getComponent();
202: }
203:
204: public Component getTableCellEditorComponent(JTable table,
205: Object value, boolean isSelected, int row, int column) {
206: delegate.setValue(value);
207: return getComponent();
208: }
209: }
|