1 package jimm.datavision.gui; 2 import jimm.datavision.Report; 3 import jimm.util.I18N; 4 import java.awt.BorderLayout ; 5 import java.awt.event.*; 6 import javax.swing.*; 7 import javax.swing.event.ListSelectionListener ; 8 import javax.swing.event.ListSelectionEvent ; 9 10 11 12 18 public abstract class TwoListWin extends EditWin 19 implements ActionListener, ListSelectionListener 20 { 21 22 protected static final String PROTOTYPE_CELL_VALUE = "table_name.column_name"; 23 24 protected Report report; 25 protected SortedListModel leftModel; 26 protected DefaultListModel rightModel; 27 protected JList leftList; 28 protected JList rightList; 29 protected JButton addOne, addAll, removeOne, removeAll; 30 protected JButton moveUp, moveDown; 31 protected JRadioButton ascendingRButton, descendingRButton; 32 33 42 public TwoListWin(Designer designer, String title, String commandNameKey, 43 String rightBoxTitleKey, Report report) 44 { 45 super(designer, title, commandNameKey); 46 this.report = report; 47 48 leftModel = new SortedListModel(); 49 rightModel = new DefaultListModel(); 50 fillListModels(); 51 52 buildWindow(rightBoxTitleKey); 53 pack(); 54 setVisible(true); 55 } 56 57 62 protected void buildWindow(String rightBoxTitleKey) { 63 Box box = Box.createVerticalBox(); 65 box.add(Box.createVerticalStrut(32)); 66 67 addOne = new JButton(">"); 68 addOne.addActionListener(this); 69 box.add(addOne); 70 71 addAll = new JButton(">>>"); 72 addAll.addActionListener(this); 73 box.add(addAll); 74 75 removeOne = new JButton("<"); 76 removeOne.addActionListener(this); 77 box.add(removeOne); 78 79 removeAll = new JButton("<<<"); 80 removeAll.addActionListener(this); 81 box.add(removeAll); 82 83 JPanel moveButtonPanel = new JPanel(); 84 moveButtonPanel.add(box); 85 86 box = Box.createVerticalBox(); 88 box.add(Box.createVerticalStrut(32)); 89 90 moveUp = new JButton(I18N.get("TwoListWin.move_up")); 91 moveUp.addActionListener(this); 92 box.add(moveUp); 93 94 moveDown = new JButton(I18N.get("TwoListWin.move_down")); 95 moveDown.addActionListener(this); 96 box.add(moveDown); 97 98 box.add(Box.createVerticalStrut(32)); 99 100 ButtonGroup bg = new ButtonGroup(); 101 102 ascendingRButton = new JRadioButton(I18N.get("GUI.ascending")); 103 ascendingRButton.addActionListener(this); 104 box.add(ascendingRButton); 105 bg.add(ascendingRButton); 106 107 descendingRButton = new JRadioButton(I18N.get("GUI.descending")); 108 descendingRButton.addActionListener(this); 109 box.add(descendingRButton); 110 bg.add(descendingRButton); 111 112 JPanel orderButtonPanel = new JPanel(); 113 orderButtonPanel.add(box); 114 115 leftList = new JList(leftModel); 117 leftList.addListSelectionListener(this); 118 leftList.setPrototypeCellValue(PROTOTYPE_CELL_VALUE); 119 leftList.addMouseListener(new MouseAdapter() { 120 public void mouseClicked(MouseEvent e) { 121 if (e.getClickCount() == 2) 122 moveToRight(leftList.locationToIndex(e.getPoint())); 123 } 124 }); 125 Box leftBox = Box.createVerticalBox(); 126 leftBox.add(new JLabel(I18N.get("TwoListWin.columns"))); 127 leftBox.add(new JScrollPane(leftList)); 128 129 rightList = new JList(rightModel); 131 rightList.addListSelectionListener(this); 132 rightList.setPrototypeCellValue(PROTOTYPE_CELL_VALUE); 133 rightList.addMouseListener(new MouseAdapter() { 134 public void mouseClicked(MouseEvent e) { 135 if (e.getClickCount() == 2) 136 moveToLeft(rightList.locationToIndex(e.getPoint())); 137 } 138 }); 139 Box rightBox = Box.createVerticalBox(); 140 rightBox.add(new JLabel(I18N.get(rightBoxTitleKey))); 141 rightBox.add(new JScrollPane(rightList)); 142 143 Box center = Box.createHorizontalBox(); 145 center.add(Box.createHorizontalStrut(12)); 146 center.add(leftBox); 147 center.add(moveButtonPanel); 148 center.add(rightBox); 149 center.add(orderButtonPanel); 150 center.add(Box.createHorizontalStrut(12)); 151 152 JPanel buttonPanel = closeButtonPanel(); 154 155 getContentPane().add(center, BorderLayout.CENTER); 157 getContentPane().add(buttonPanel, BorderLayout.SOUTH); 158 159 adjustButtons(); 161 } 162 163 protected abstract void fillListModels(); 164 165 171 protected void moveToRight(int index) { 172 moveToRight(index, true); 173 } 174 175 182 protected void moveToRight(int index, boolean callAdjustButtons) { 183 TLWListItem item = (TLWListItem)leftModel.getElementAt(index); 184 leftModel.remove(index); 185 rightModel.addElement(item); 186 if (callAdjustButtons) 187 adjustButtons(); 188 } 189 190 196 protected void moveToLeft(int index) { 197 moveToLeft(index, true); 198 } 199 200 207 protected void moveToLeft(int index, boolean callAdjustButtons) { 208 TLWListItem item = (TLWListItem)rightModel.elementAt(index); 209 rightModel.removeElementAt(index); 210 leftModel.add(item); 211 if (callAdjustButtons) 212 adjustButtons(); 213 } 214 215 218 public void actionPerformed(ActionEvent e) { 219 SortedListModel leftModel = (SortedListModel)leftList.getModel(); 220 DefaultListModel rightModel = (DefaultListModel)rightList.getModel(); 221 222 String cmd = e.getActionCommand(); 223 if (cmd.equals(">")) { 224 int[] indices = leftList.getSelectedIndices(); 225 for (int i = 0; i < indices.length; ++i) 226 moveToRight(indices[i], false); 227 adjustButtons(); 228 } 229 else if (cmd.equals(">>>")) { 230 Object [] items = leftModel.toArray(); 231 for (int i = 0; i < items.length; ++i) 232 rightModel.addElement(items[i]); 233 leftModel.removeAllElements(); 234 adjustButtons(); 235 } 236 else if (cmd.equals("<")) { 237 int[] indices = rightList.getSelectedIndices(); 238 for (int i = 0; i < indices.length; ++i) 239 moveToLeft(indices[i], false); 240 adjustButtons(); 241 } 242 else if (cmd.equals("<<<")) { 243 Object [] items = rightModel.toArray(); 244 for (int i = 0; i < items.length; ++i) 245 leftModel.add((TLWListItem)items[i]); 246 rightModel.removeAllElements(); 247 adjustButtons(); 248 } 249 else if (cmd.equals(I18N.get("TwoListWin.move_up"))) { 250 int index = rightList.getSelectedIndex(); 251 Object item = rightModel.remove(index); 252 rightModel.add(index - 1, item); 253 rightList.setSelectedIndex(index - 1); 254 } 255 else if (cmd.equals(I18N.get("TwoListWin.move_down"))) { 256 int index = rightList.getSelectedIndex(); 257 Object item = rightModel.remove(index); 258 rightModel.add(index + 1, item); 259 rightList.setSelectedIndex(index + 1); 260 } 261 else 262 super.actionPerformed(e); 263 } 264 265 public void valueChanged(ListSelectionEvent e) { 266 adjustButtons(); 267 } 268 269 protected void adjustButtons() { 270 boolean selEmpty; 271 272 addOne.setEnabled(!leftList.isSelectionEmpty()); 273 addAll.setEnabled(leftList.getModel().getSize() > 0); 274 275 selEmpty = rightList.isSelectionEmpty(); 276 if (selEmpty) { 277 removeOne.setEnabled(false); 278 moveUp.setEnabled(false); 279 moveDown.setEnabled(false); 280 ascendingRButton.setEnabled(false); 281 descendingRButton.setEnabled(false); 282 ascendingRButton.setSelected(false); 283 descendingRButton.setSelected(false); 284 } 285 else { 286 removeOne.setEnabled(true); 287 288 int[] selectionIndices = rightList.getSelectedIndices(); 289 if (selectionIndices.length == 1) { 290 int numGroups = rightModel.size(); 291 if (numGroups > 1) { 292 int index = selectionIndices[0]; 293 moveUp.setEnabled(index != 0); 294 moveDown.setEnabled(index != numGroups - 1); 295 } 296 else { 297 moveUp.setEnabled(false); 298 moveDown.setEnabled(false); 299 } 300 301 ascendingRButton.setEnabled(true); 302 descendingRButton.setEnabled(true); 303 304 TLWListItem item = (TLWListItem)rightList.getSelectedValue(); 305 if (item.sortsAscending()) 306 ascendingRButton.setSelected(true); 307 else 308 descendingRButton.setSelected(true); 309 } 310 else { 311 moveUp.setEnabled(false); 312 moveDown.setEnabled(false); 313 ascendingRButton.setEnabled(false); 314 descendingRButton.setEnabled(false); 315 ascendingRButton.setSelected(false); 316 descendingRButton.setSelected(false); 317 } 318 } 319 removeAll.setEnabled(rightList.getModel().getSize() > 0); 320 } 321 322 } 323 | Popular Tags |