KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jdesktop > swing > binding > ComboBoxBinding


1 /*
2  * $Id: ComboBoxBinding.java,v 1.3 2005/02/07 12:53:21 kleopatra Exp $
3  *
4  * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
5  * Santa Clara, California 95054, U.S.A. All rights reserved.
6  */

7
8 package org.jdesktop.swing.binding;
9
10 import org.jdesktop.swing.data.DataModel;
11 import org.jdesktop.swing.data.EnumeratedMetaData;
12 import org.jdesktop.swing.data.MetaData;
13
14 import java.awt.event.ActionEvent JavaDoc;
15 import java.awt.event.ActionListener JavaDoc;
16 import java.beans.PropertyChangeEvent JavaDoc;
17 import java.beans.PropertyChangeListener JavaDoc;
18
19 import javax.swing.ComboBoxModel JavaDoc;
20 import javax.swing.DefaultComboBoxModel JavaDoc;
21 import javax.swing.JComponent JavaDoc;
22 import javax.swing.JComboBox JavaDoc;
23 import javax.swing.MutableComboBoxModel JavaDoc;
24
25 /**
26  * Class which binds a component that supports setting a one-of-many
27  * value (JComboBox) to a data model field which may be an arbitrary type.
28  * @author Amy Fowler
29  * @version 1.0
30  */

31 public class ComboBoxBinding extends AbstractBinding {
32     private JComboBox JavaDoc comboBox;
33     /* Note: we cannot support binding to any component with a ComboBoxModel
34      * because ComboBoxModel fires no event when the value changes!
35      * JW: ?? don't understand
36      */

37     public ComboBoxBinding(JComboBox JavaDoc combobox,
38                            DataModel dataModel, String JavaDoc fieldName) {
39         super(combobox, dataModel, fieldName, Binding.AUTO_VALIDATE_NONE);
40     }
41
42     public JComponent JavaDoc getComponent() {
43         return comboBox;
44     }
45
46     protected void setComponent(JComponent JavaDoc component) {
47         comboBox = (JComboBox JavaDoc) component;
48         configureDropDown();
49         comboBox.addActionListener(new ActionListener JavaDoc() {
50             public void actionPerformed(ActionEvent JavaDoc e) {
51                 if (!pulling) {
52                     setModified(true);
53                 }
54             }
55         });
56     }
57
58     
59     private void configureDropDown() {
60         if (metaData instanceof EnumeratedMetaData) {
61             updateComboBoxModel(((EnumeratedMetaData) metaData).getEnumeration());
62         }
63     }
64
65     protected void updateComboBoxModel(Object JavaDoc[] items) {
66         DefaultComboBoxModel JavaDoc model = new DefaultComboBoxModel JavaDoc(items);
67         model.setSelectedItem(getComponentValue());
68         // JW: brute force
69
comboBox.setModel(model);
70        setValidState(UNVALIDATED);
71     }
72
73     protected void installMetaDataListener() {
74         PropertyChangeListener JavaDoc l = new PropertyChangeListener JavaDoc() {
75
76             public void propertyChange(PropertyChangeEvent JavaDoc evt) {
77                 if ("enumeration".equals(evt.getPropertyName())) {
78                     updateComboBoxModel((Object JavaDoc[]) evt.getNewValue());
79                 }
80                 
81             }
82             
83         };
84         metaData.addPropertyChangeListener(l);
85     }
86
87     protected Object JavaDoc getComponentValue(){
88         return comboBox.getSelectedItem();
89     }
90
91     protected void setComponentValue(Object JavaDoc value) {
92         comboBox.getModel().setSelectedItem(value);
93     }
94
95 }
96
Popular Tags