View Javadoc

1   package coras.client.ui;
2   
3   import java.awt.Color;
4   import java.awt.Component;
5   import java.awt.Frame;
6   import java.awt.GridBagConstraints;
7   import java.awt.GridBagLayout;
8   import java.awt.event.ItemEvent;
9   import java.util.ArrayList;
10  import java.util.Arrays;
11  import java.util.Collection;
12  import java.util.Collections;
13  import java.util.Iterator;
14  
15  import javax.swing.JButton;
16  import javax.swing.JCheckBox;
17  import javax.swing.JDialog;
18  import javax.swing.JOptionPane;
19  import javax.swing.JPanel;
20  import javax.swing.JScrollPane;
21  import javax.swing.JTable;
22  import javax.swing.table.DefaultTableModel;
23  import javax.swing.table.TableColumn;
24  import javax.swing.table.TableModel;
25  
26  import coras.common.CorasElement;
27  import coras.types.ElementTypeEnum;
28  import coras.types.SubtypeEnum;
29  
30  public class SelectElementsDialog extends JDialog {
31  
32  	private JPanel jContentPane = null;
33  	private JScrollPane elementScrollPane = null;
34  	private JTable elementTable = null;
35  	private JCheckBox selectAllCheckBox = null;
36  	private JPanel buttonPanel = null;
37  	private JButton okButton = null;
38  	private JButton cancelButton = null;
39  
40  	private Collection elements = null;
41  	private int result = JOptionPane.CANCEL_OPTION;
42  	private SelectElementsTableModel tableModel = null;  //  @jve:decl-index=0:visual-constraint=""
43  	
44  	public static void main(String[] args) {
45  		SelectElementsDialog dialog =
46  			new SelectElementsDialog();
47  		dialog.setElements(Arrays.asList(new String[] {
48  				"Hei", "på", "deg"
49  		}));
50  		dialog.setVisible(true);
51  	}
52  	
53  	/***
54  	 * This is the default constructor
55  	 */
56  	public SelectElementsDialog() {
57  		this(null);
58  	}
59  	
60  	public SelectElementsDialog(Component owner) {
61  		super(owner instanceof Frame ? (Frame)owner : null);
62  		initialize();
63  		setLocationRelativeTo(owner);
64  	}
65  	
66  	public int getResult() {
67  		return result;
68  	}
69  
70  	public void setElements(Collection elements) {
71  		this.elements = elements;
72  		DefaultTableModel model = getTableModel();
73  		int rows = model.getRowCount();
74  		for (int i = rows - 1; i >= 0; i--) {
75  			model.removeRow(i);
76  		}
77  		
78  		for (Iterator i = elements.iterator(); i.hasNext();) {
79  			Object o = i.next();
80  			ElementTypeEnum type;
81  			SubtypeEnum subtype;
82  			String name;
83  			if (o instanceof CorasElement) {
84  				CorasElement element = (CorasElement) o;
85  				type = element.getType();
86  				subtype = element.getSubtype();
87  				name = element.getName(); 
88  			} else {
89  				type = ElementTypeEnum.TABLE;
90  				subtype = null;
91  				name = "" + o;
92  			}
93  			Boolean selected = new Boolean(true);
94  			Object[] rowData = new Object[] {
95  					selected,
96  					name,
97  					(subtype != null ? (Object)subtype : (Object)type)
98  			};
99  			model.addRow(rowData);
100 		}
101 //		getElementTable().setModel(model);
102 
103 		/*
104 		JViewport columnHeaderViewport = new JViewport();
105 		columnHeaderViewport.add(getElementTable().getTableHeader());
106 		getElementScrollPane().setColumnHeader(columnHeaderViewport);
107 		*/
108 	}
109 	
110 	public Collection getSelectedElements() {
111 		if (elements == null) {
112 			return Collections.EMPTY_LIST;
113 		}
114 		ArrayList result = new ArrayList();
115 		TableModel model = getElementTable().getModel();
116 		int row = 0;
117 		for (Iterator i = elements.iterator(); i.hasNext();) {
118 			CorasElement element = (CorasElement) i.next();
119 			Boolean selected = (Boolean) model.getValueAt(row, 0);
120 			if (selected.booleanValue()) {
121 				result.add(element);
122 			}
123 			row++;
124 		}
125 		return result;
126 	}
127 
128 	/***
129 	 * This method initializes this
130 	 * 
131 	 * @return void
132 	 */
133 	private void initialize() {
134 		this.setSize(500, 300);
135 		this.setTitle("Select items");
136 		this.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
137 		this.setModal(true);
138 		this.setContentPane(getJContentPane());
139 		this.addWindowListener(new java.awt.event.WindowAdapter() {
140 			public void windowClosing(java.awt.event.WindowEvent e) {
141 				result = JOptionPane.CANCEL_OPTION;
142 				dispose();
143 			}
144 		});
145 	}
146 
147 	/***
148 	 * This method initializes jContentPane
149 	 * 
150 	 * @return javax.swing.JPanel
151 	 */
152 	private JPanel getJContentPane() {
153 		if (jContentPane == null) {
154 			GridBagConstraints gridBagConstraints = new GridBagConstraints();
155 			gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
156 			gridBagConstraints.gridy = 1;
157 			gridBagConstraints.weightx = 1.0;
158 			gridBagConstraints.weighty = 1.0;
159 			gridBagConstraints.gridx = 0;
160 			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
161 			gridBagConstraints2.gridx = 0;
162 			gridBagConstraints2.gridy = 3;
163 			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
164 			gridBagConstraints1.gridx = 0;
165 			gridBagConstraints1.anchor = java.awt.GridBagConstraints.WEST;
166 			gridBagConstraints1.gridy = 2;
167 			jContentPane = new JPanel();
168 			jContentPane.setLayout(new GridBagLayout());
169 			jContentPane.add(getSelectAllCheckBox(), gridBagConstraints1);
170 			jContentPane.add(getButtonPanel(), gridBagConstraints2);
171 			jContentPane.add(getElementScrollPane(), gridBagConstraints);
172 		}
173 		return jContentPane;
174 	}
175 
176 	/***
177 	 * This method initializes jScrollPane	
178 	 * 	
179 	 * @return javax.swing.JScrollPane	
180 	 */
181 	private JScrollPane getElementScrollPane() {
182 		if (elementScrollPane == null) {
183 			elementScrollPane = new JScrollPane();
184 			elementScrollPane.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
185 			elementScrollPane.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
186 			elementScrollPane.setViewportView(getElementTable());
187 			elementScrollPane.getViewport().setBackground(Color.WHITE);
188 		}
189 		return elementScrollPane;
190 	}
191 
192 	/***
193 	 * This method initializes elementTable	
194 	 * 	
195 	 * @return javax.swing.JTable	
196 	 */
197 	private JTable getElementTable() {
198 		if (elementTable == null) {
199 			elementTable = new JTable();
200 			elementTable.setModel(getTableModel());
201 			TableColumn selectColumn = elementTable.getColumnModel().getColumn(0);
202 			int width = new JCheckBox().getPreferredSize().width;
203 			selectColumn.setMinWidth(width);
204 			selectColumn.setMaxWidth(width);
205 		}
206 		return elementTable;
207 	}
208 
209 	/***
210 	 * This method initializes selectAllCheckBox	
211 	 * 	
212 	 * @return javax.swing.JCheckBox	
213 	 */
214 	private JCheckBox getSelectAllCheckBox() {
215 		if (selectAllCheckBox == null) {
216 			selectAllCheckBox = new JCheckBox();
217 			selectAllCheckBox.setText("Select / Deselect All");
218 			selectAllCheckBox.setMnemonic(java.awt.event.KeyEvent.VK_A);
219 			selectAllCheckBox.setSelected(true);
220 			selectAllCheckBox.addItemListener(new java.awt.event.ItemListener() {
221 				public void itemStateChanged(java.awt.event.ItemEvent e) {
222 					boolean selected = e.getStateChange() == ItemEvent.SELECTED;
223 					DefaultTableModel model = (DefaultTableModel) getElementTable().getModel();
224 					int rows = model.getRowCount();
225 					for (int i = 0; i < rows; i++) {
226 						model.setValueAt(new Boolean(selected), i, 0);
227 					}
228 				}
229 			});
230 		}
231 		return selectAllCheckBox;
232 	}
233 
234 	/***
235 	 * This method initializes buttonPanel	
236 	 * 	
237 	 * @return javax.swing.JPanel	
238 	 */
239 	private JPanel getButtonPanel() {
240 		if (buttonPanel == null) {
241 			buttonPanel = new JPanel();
242 			buttonPanel.add(getOkButton(), null);
243 			buttonPanel.add(getCancelButton(), null);
244 		}
245 		return buttonPanel;
246 	}
247 
248 	/***
249 	 * This method initializes okButton	
250 	 * 	
251 	 * @return javax.swing.JButton	
252 	 */
253 	private JButton getOkButton() {
254 		if (okButton == null) {
255 			okButton = new JButton();
256 			okButton.setText("OK");
257 			okButton.setMnemonic(java.awt.event.KeyEvent.VK_O);
258 			okButton.addActionListener(new java.awt.event.ActionListener() {
259 				public void actionPerformed(java.awt.event.ActionEvent e) {
260 					result = JOptionPane.OK_OPTION;
261 					dispose();
262 				}
263 			});
264 		}
265 		return okButton;
266 	}
267 
268 	/***
269 	 * This method initializes cancelButton	
270 	 * 	
271 	 * @return javax.swing.JButton	
272 	 */
273 	private JButton getCancelButton() {
274 		if (cancelButton == null) {
275 			cancelButton = new JButton();
276 			cancelButton.setText("Cancel");
277 			cancelButton.setMnemonic(java.awt.event.KeyEvent.VK_C);
278 			cancelButton.addActionListener(new java.awt.event.ActionListener() {
279 				public void actionPerformed(java.awt.event.ActionEvent e) {
280 					result = JOptionPane.CANCEL_OPTION;
281 					dispose();
282 				}
283 			});
284 		}
285 		return cancelButton;
286 	}
287 
288 	/***
289 	 * This method initializes tableModel	
290 	 * 	
291 	 * @return coras.client.ui.SelectElementsTableModel	
292 	 */
293 	private SelectElementsTableModel getTableModel() {
294 		if (tableModel == null) {
295 			tableModel = new SelectElementsTableModel();
296 			tableModel.addColumn(" ");
297 			tableModel.addColumn("Name");
298 			tableModel.addColumn("Type");
299 		}
300 		return tableModel;
301 	}
302 
303 	class SelectElementsTableModel extends DefaultTableModel {
304 		public Class getColumnClass(int column) {
305 			if (column == 0) {
306 				return Boolean.class;
307 			} else {
308 				return String.class;
309 			}
310 		}
311 		public boolean isCellEditable(int row, int column) {
312 			return column == 0;
313 		}
314 	}
315 
316 }