1 30 package com.genimen.djeneric.tools.specifier.components; 31 32 import javax.swing.DefaultComboBoxModel ; 33 import javax.swing.JComponent ; 34 import javax.swing.JList ; 35 import javax.swing.ListModel ; 36 import javax.swing.event.ListSelectionEvent ; 37 import javax.swing.event.ListSelectionListener ; 38 39 import com.genimen.djeneric.repository.DjDomainValue; 40 import com.genimen.djeneric.repository.exceptions.DjenericException; 41 import com.genimen.djeneric.tools.specifier.interfaces.ObjectViewer; 42 import com.genimen.djeneric.util.DjLogger; 43 44 public class DjListBox extends JList implements DjBindable, ListSelectionListener 45 { 46 private static final long serialVersionUID = 1L; 47 private BindingMediator _mediator; 48 49 public DjListBox(ObjectViewer viewer, String propertyName, DjDomainValue[] domainValues) throws DjenericException 50 { 51 super(); 52 setModel(new DefaultComboBoxModel (domainValues)); 53 addListSelectionListener(this); 54 55 _mediator = new BindingMediator(this, viewer, propertyName); 56 } 57 58 public void valueChanged(ListSelectionEvent e) 59 { 60 try 61 { 62 apply(); 63 } 64 catch (Exception x) 65 { 66 DjLogger.log(x); 67 } 68 } 69 70 public boolean isComponentWritable() 71 { 72 return _mediator.isComponentWritable(); 73 } 74 75 public void clear() 76 { 77 setSelectedIndex(-1); 78 setEnabled(_mediator.isComponentWritable()); 79 } 80 81 public void apply() throws DjenericException 82 { 83 if (getSelectedIndex() != -1) 84 { 85 DjDomainValue dv = (DjDomainValue) getSelectedValue(); 86 _mediator.setPropertyValue(dv.getValue()); 87 } 88 } 89 90 public void setPropertyName(String propertyName) throws DjenericException 91 { 92 _mediator.setPropertyName(propertyName); 93 } 94 95 public void setViewer(ObjectViewer viewer) 96 { 97 _mediator.setViewer(viewer); 98 } 99 100 public void synchronize() throws DjenericException 101 { 102 setEnabled(_mediator.isComponentWritable()); 103 104 String curVal = _mediator.getPropertyValueString(); 105 int idx = -1; 106 ListModel mdl = getModel(); 107 108 if (curVal.length() != 0) 109 { 110 for (int i = 0; i < mdl.getSize(); i++) 111 { 112 DjDomainValue dv = (DjDomainValue) mdl.getElementAt(i); 113 if (dv.getValue().equals(curVal)) 114 { 115 idx = i; 116 break; 117 } 118 } 119 } 120 121 setSelectedIndex(idx); 122 } 123 124 public Object getDisplayedValue() 125 { 126 if (getSelectedIndex() != -1) return getSelectedValue(); 127 return null; 128 } 129 130 public String getPropertyName() 131 { 132 return _mediator.getPropertyName(); 133 } 134 135 public JComponent getFocussableComponent() 136 { 137 return this; 138 } 139 } | Popular Tags |