Changeset 1874
- Timestamp:
- 05/14/09 10:49:16 (3 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
jmatter-complet/trunk/modules/swingvm/src/com/u2d/view/swing/list/CompositeTableView.java
r1872 r1874 7 7 import com.u2d.list.CompositeList; 8 8 import com.u2d.model.EObject; 9 import com.u2d.model.ComplexEObject; 10 import com.u2d.model.ComplexType; 9 11 import com.u2d.ui.IconButton; 10 12 import javax.swing.*; 11 import javax.swing.event.ListSelectionListener; 12 import javax.swing.event.ListSelectionEvent; 13 import javax.swing.event.ChangeEvent; 14 import javax.swing.event.ListDataEvent; 13 import javax.swing.event.*; 15 14 import java.awt.*; 15 import java.awt.datatransfer.Transferable; 16 import java.awt.datatransfer.DataFlavor; 17 import java.awt.datatransfer.UnsupportedFlavorException; 18 import java.awt.dnd.DropTarget; 19 import java.awt.dnd.DropTargetAdapter; 16 20 import java.awt.event.ActionListener; 17 21 import java.awt.event.ActionEvent; 18 22 import java.beans.PropertyChangeListener; 19 23 import java.beans.PropertyChangeEvent; 24 import java.io.IOException; 25 import java.util.TooManyListenersException; 20 26 21 27 /** … … 31 37 private TableView _tableView; 32 38 private JButton _addBtn, _removeBtn; 33 private JPanel northPanel;34 private PropertyChangeListener readOnlyChangeListener;39 private JPanel _northPanel; 40 private PropertyChangeListener _readOnlyChangeListener; 35 41 36 42 public CompositeTableView(CompositeList leo) … … 48 54 49 55 add(northPanel(), BorderLayout.PAGE_START); 50 northPanel.setVisible(!_leo.field().isReadOnly());51 readOnlyChangeListener = new PropertyChangeListener()56 _northPanel.setVisible(!_leo.field().isReadOnly()); 57 _readOnlyChangeListener = new PropertyChangeListener() 52 58 { 53 59 public void propertyChange(PropertyChangeEvent evt) 54 60 { 55 northPanel.setVisible(!_leo.field().isReadOnly());61 _northPanel.setVisible(!_leo.field().isReadOnly()); 56 62 } 57 63 }; 58 _leo.field().addPropertyChangeListener("readOnly", readOnlyChangeListener);64 _leo.field().addPropertyChangeListener("readOnly", _readOnlyChangeListener); 59 65 60 66 JScrollPane scrollPane = new JScrollPane(_tableView); … … 68 74 { 69 75 if (e.getValueIsAdjusting()) return; 70 adjustRemoveBtnEnabled(); 71 } 72 }); 73 } 76 SwingUtilities.invokeLater(new Runnable() { 77 public void run() { 78 adjustRemoveBtnEnabled(); 79 } 80 }); 81 } 82 }); 83 84 setupDropHandler(); 85 } 86 87 protected void setupDropHandler() 88 { 89 DropTarget dropTarget = new DropTarget(); 90 try 91 { 92 dropTarget.addDropTargetListener(new DropTargetAdapter() 93 { 94 public void drop(final java.awt.dnd.DropTargetDropEvent dropTargetDropEvent) 95 { 96 Transferable t = dropTargetDropEvent.getTransferable(); 97 98 Object transferObject = null; 99 try 100 { 101 DataFlavor flavor = t.getTransferDataFlavors()[0]; 102 transferObject = t.getTransferData(flavor); 103 } 104 catch (UnsupportedFlavorException ex) 105 { 106 System.err.println("UnsupportedFlavorException: "+ex.getMessage()); 107 ex.printStackTrace(); 108 dropTargetDropEvent.rejectDrop(); 109 } 110 catch (IOException ex) 111 { 112 System.err.println("IOException: "+ex.getMessage()); 113 ex.printStackTrace(); 114 dropTargetDropEvent.rejectDrop(); 115 } 116 117 if (transferObject instanceof ComplexEObject) 118 { 119 ComplexEObject droppedItem = (ComplexEObject) transferObject; 120 ComplexType droppedType = droppedItem.type(); 121 ComplexType listItemType = _leo.type(); 122 123 if (listItemType.hasFieldOfType(droppedType.getJavaClass())) 124 { 125 ComplexEObject newItem = listItemType.instance(); 126 listItemType.firstFieldOfType(droppedType.getJavaClass()).set(newItem, droppedItem); 127 _leo.add(newItem); 128 if (!_leo.parentObject().isEditableState()) 129 { 130 AppLoader.getInstance().newThread(new Runnable() { 131 public void run() 132 { 133 _leo.parentObject().save(); 134 } 135 }).start(); 136 } 137 dropTargetDropEvent.dropComplete(true); 138 return; 139 } 140 } 141 // in all other cases reject drop.. 142 dropTargetDropEvent.rejectDrop(); 143 } 144 }); 145 _tableView.setDropTarget(dropTarget); 146 _tableView.getTableHeader().setDropTarget(dropTarget); 147 } 148 catch (TooManyListenersException ex) 149 { 150 System.err.println("TooManyListenersException: "+ex.getMessage()); 151 ex.printStackTrace(); 152 } 153 } 154 74 155 75 156 private void adjustRemoveBtnEnabled() … … 81 162 private JPanel northPanel() 82 163 { 83 northPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));84 northPanel.setOpaque(false);85 northPanel.add(addBtn());86 northPanel.add(removeBtn());87 return northPanel;164 _northPanel = new JPanel(new FlowLayout(FlowLayout.LEADING)); 165 _northPanel.setOpaque(false); 166 _northPanel.add(addBtn()); 167 _northPanel.add(removeBtn()); 168 return _northPanel; 88 169 } 89 170 … … 154 235 _leo.parentObject().removeChangeListener(this); 155 236 } 156 _leo.field().removePropertyChangeListener("readOnly", readOnlyChangeListener);237 _leo.field().removePropertyChangeListener("readOnly", _readOnlyChangeListener); 157 238 } 158 239
