KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jimm > datavision > gui > TwoListWin


1 package jimm.datavision.gui;
2 import jimm.datavision.Report;
3 import jimm.util.I18N;
4 import java.awt.BorderLayout JavaDoc;
5 import java.awt.event.*;
6 import javax.swing.*;
7 import javax.swing.event.ListSelectionListener JavaDoc;
8 import javax.swing.event.ListSelectionEvent JavaDoc;
9
10 /* ================================================================ */
11
12 /**
13  * An abstract superclass for edit windows that manipulate a list of
14  * sortable, orderable items.
15  *
16  * @author Jim Menard, <a HREF="mailto:jimm@io.com">jimm@io.com</a>
17  */

18 public abstract class TwoListWin extends EditWin
19     implements ActionListener, ListSelectionListener JavaDoc
20 {
21
22 protected static final String JavaDoc 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 /**
34  * Constructor.
35  *
36  * @param designer the window to which this dialog belongs
37  * @param title the window title
38  * @param commandNameKey the {@link I18N} command name lookup key
39  * @param rightBoxTitleKey the I18N lookup key for the right box title
40  * @param report the...um...I forgot
41  */

42 public TwoListWin(Designer designer, String JavaDoc title, String JavaDoc commandNameKey,
43           String JavaDoc 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 /**
58  * Builds the window contents.
59  *
60  * @param rightBoxTitleKey the I18N lookup key for the right box title
61  */

62 protected void buildWindow(String JavaDoc rightBoxTitleKey) {
63     // Movement buttons
64
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     // "Move Up", "Move Down", "Ascending" and "Descending" radio buttons
87
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     // Left list and label in panel
116
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     // Right list and label in panel
130
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     // Panel containing left, arrows, right, and radio buttons
144
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     // OK, Apply, Revert, and Cancel Buttons
153
JPanel buttonPanel = closeButtonPanel();
154
155     // Add tables and buttons to window
156
getContentPane().add(center, BorderLayout.CENTER);
157     getContentPane().add(buttonPanel, BorderLayout.SOUTH);
158
159     // Update button states
160
adjustButtons();
161 }
162
163 protected abstract void fillListModels();
164
165 /**
166  * Moves the specified item number from the left to the right list
167  * and calls {@link #adjustButtons}.
168  *
169  * @param index the item number to move
170  */

171 protected void moveToRight(int index) {
172     moveToRight(index, true);
173 }
174
175 /**
176  * Moves the specified item number from the left to the right list
177  * and optionally calls {@link #adjustButtons}.
178  *
179  * @param index the item number to move
180  * @param callAdjustButtons if <code>true</code>, make it so
181  */

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 /**
191  * Moves the specified item number from the right to the left list
192  * and calls {@link #adjustButtons}.
193  *
194  * @param index the item number to move
195  */

196 protected void moveToLeft(int index) {
197     moveToLeft(index, true);
198 }
199
200 /**
201  * Moves the specified item number from the right to the left list
202  * and optionally calls {@link #adjustButtons}.
203  *
204  * @param index the item number to move
205  * @param callAdjustButtons if <code>true</code>, make it so
206  */

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 /**
216  * Handles all buttons except ascending and descending sort order.
217  */

218 public void actionPerformed(ActionEvent e) {
219     SortedListModel leftModel = (SortedListModel)leftList.getModel();
220     DefaultListModel rightModel = (DefaultListModel)rightList.getModel();
221
222     String JavaDoc 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 JavaDoc[] 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 JavaDoc[] 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 JavaDoc 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 JavaDoc 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 JavaDoc 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