1 | /* |
2 | * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. |
3 | * |
4 | * Redistribution and use in source and binary forms, with or without |
5 | * modification, are permitted provided that the following conditions |
6 | * are met: |
7 | * |
8 | * -Redistributions of source code must retain the above copyright |
9 | * notice, this list of conditions and the following disclaimer. |
10 | * |
11 | * -Redistribution in binary form must reproduct the above copyright |
12 | * notice, this list of conditions and the following disclaimer in |
13 | * the documentation and/or other materials provided with the distribution. |
14 | * |
15 | * Neither the name of Sun Microsystems, Inc. or the names of contributors |
16 | * may be used to endorse or promote products derived from this software |
17 | * without specific prior written permission. |
18 | * |
19 | * This software is provided "AS IS," without a warranty of any kind. ALL |
20 | * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING |
21 | * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
22 | * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT |
23 | * BE LIABLE FOR ANY DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT |
24 | * OF OR RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS |
25 | * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST |
26 | * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, |
27 | * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY |
28 | * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN |
29 | * IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. |
30 | * |
31 | * You acknowledge that Software is not designed, licensed or intended for |
32 | * use in the design, construction, operation or maintenance of any nuclear |
33 | * facility. |
34 | */ |
35 | |
36 | /* |
37 | * @(#)TableDemo.java 1.12 03/01/23 |
38 | */ |
39 | |
40 | |
41 | import javax.swing.*; |
42 | import javax.swing.event.*; |
43 | import javax.swing.text.*; |
44 | import javax.swing.table.*; |
45 | import javax.swing.border.*; |
46 | import javax.swing.colorchooser.*; |
47 | import javax.swing.filechooser.*; |
48 | import javax.accessibility.*; |
49 | |
50 | import java.awt.*; |
51 | import java.awt.event.*; |
52 | import java.beans.*; |
53 | import java.util.*; |
54 | import java.io.*; |
55 | import java.applet.*; |
56 | import java.net.*; |
57 | |
58 | /** |
59 | * Table demo |
60 | * |
61 | * @version 1.12 01/23/03 |
62 | * @author Philip Milne |
63 | * @author Steve Wilson |
64 | */ |
65 | public class TableDemo extends DemoModule { |
66 | JTable tableView; |
67 | JScrollPane scrollpane; |
68 | Dimension origin = new Dimension(0, 0); |
69 | |
70 | JCheckBox isColumnReorderingAllowedCheckBox; |
71 | JCheckBox showHorizontalLinesCheckBox; |
72 | JCheckBox showVerticalLinesCheckBox; |
73 | |
74 | JCheckBox isColumnSelectionAllowedCheckBox; |
75 | JCheckBox isRowSelectionAllowedCheckBox; |
76 | // JCheckBox isRowAndColumnSelectionAllowedCheckBox; |
77 | |
78 | JLabel interCellSpacingLabel; |
79 | JLabel rowHeightLabel; |
80 | |
81 | JSlider interCellSpacingSlider; |
82 | JSlider rowHeightSlider; |
83 | |
84 | JComboBox selectionModeComboBox = null; |
85 | JComboBox resizeModeComboBox = null; |
86 | |
87 | JPanel controlPanel; |
88 | JScrollPane tableAggregate; |
89 | |
90 | String path = "ImageClub/food/"; |
91 | |
92 | final int INITIAL_ROWHEIGHT = 33; |
93 | |
94 | /** |
95 | * main method allows us to run as a standalone demo. |
96 | */ |
97 | public static void main(String[] args) { |
98 | TableDemo demo = new TableDemo(null); |
99 | demo.mainImpl(); |
100 | } |
101 | |
102 | /** |
103 | * TableDemo Constructor |
104 | */ |
105 | public TableDemo(SwingSet2 swingset) { |
106 | super(swingset, "TableDemo", "toolbar/JTable.gif"); |
107 | |
108 | getDemoPanel().setLayout(new BorderLayout()); |
109 | controlPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
110 | JPanel column1 = new JPanel (new ColumnLayout() ); |
111 | JPanel column2 = new JPanel (new ColumnLayout() ); |
112 | JPanel column3 = new JPanel (new ColumnLayout() ); |
113 | |
114 | getDemoPanel().add(controlPanel, BorderLayout.NORTH); |
115 | Vector relatedComponents = new Vector(); |
116 | |
117 | // start column 1 |
118 | isColumnReorderingAllowedCheckBox = new JCheckBox(getString("TableDemo.reordering_allowed"), true); |
119 | column1.add(isColumnReorderingAllowedCheckBox); |
120 | isColumnReorderingAllowedCheckBox.addActionListener(new ActionListener() { |
121 | public void actionPerformed(ActionEvent e) { |
122 | boolean flag = ((JCheckBox)e.getSource()).isSelected(); |
123 | tableView.getTableHeader().setReorderingAllowed(flag); |
124 | tableView.repaint(); |
125 | } |
126 | }); |
127 | |
128 | |
129 | showHorizontalLinesCheckBox = new JCheckBox(getString("TableDemo.horz_lines"), true); |
130 | column1.add(showHorizontalLinesCheckBox); |
131 | showHorizontalLinesCheckBox.addActionListener(new ActionListener() { |
132 | public void actionPerformed(ActionEvent e) { |
133 | boolean flag = ((JCheckBox)e.getSource()).isSelected(); |
134 | tableView.setShowHorizontalLines(flag); ; |
135 | tableView.repaint(); |
136 | } |
137 | }); |
138 | |
139 | showVerticalLinesCheckBox = new JCheckBox(getString("TableDemo.vert_lines"), true); |
140 | column1.add(showVerticalLinesCheckBox); |
141 | showVerticalLinesCheckBox.addActionListener(new ActionListener() { |
142 | public void actionPerformed(ActionEvent e) { |
143 | boolean flag = ((JCheckBox)e.getSource()).isSelected(); |
144 | tableView.setShowVerticalLines(flag); ; |
145 | tableView.repaint(); |
146 | } |
147 | }); |
148 | |
149 | // Show that showHorizontal/Vertical controls are related |
150 | relatedComponents.removeAllElements(); |
151 | relatedComponents.add(showHorizontalLinesCheckBox); |
152 | relatedComponents.add(showVerticalLinesCheckBox); |
153 | buildAccessibleGroup(relatedComponents); |
154 | |
155 | interCellSpacingLabel = new JLabel(getString("TableDemo.intercell_spacing_colon")); |
156 | column1.add(interCellSpacingLabel); |
157 | |
158 | interCellSpacingSlider = new JSlider(JSlider.HORIZONTAL, 0, 10, 1); |
159 | interCellSpacingSlider.getAccessibleContext().setAccessibleName(getString("TableDemo.intercell_spacing")); |
160 | interCellSpacingLabel.setLabelFor(interCellSpacingSlider); |
161 | column1.add(interCellSpacingSlider); |
162 | interCellSpacingSlider.addChangeListener(new ChangeListener() { |
163 | public void stateChanged(ChangeEvent e) { |
164 | int spacing = ((JSlider)e.getSource()).getValue(); |
165 | tableView.setIntercellSpacing(new Dimension(spacing, spacing)); |
166 | tableView.repaint(); |
167 | } |
168 | }); |
169 | |
170 | controlPanel.add(column1); |
171 | |
172 | // start column 2 |
173 | |
174 | isColumnSelectionAllowedCheckBox = new JCheckBox(getString("TableDemo.column_selection"), false); |
175 | column2.add(isColumnSelectionAllowedCheckBox); |
176 | isColumnSelectionAllowedCheckBox.addActionListener(new ActionListener() { |
177 | public void actionPerformed(ActionEvent e) { |
178 | boolean flag = ((JCheckBox)e.getSource()).isSelected(); |
179 | tableView.setColumnSelectionAllowed(flag); ; |
180 | tableView.repaint(); |
181 | } |
182 | }); |
183 | |
184 | isRowSelectionAllowedCheckBox = new JCheckBox(getString("TableDemo.row_selection"), true); |
185 | column2.add(isRowSelectionAllowedCheckBox); |
186 | isRowSelectionAllowedCheckBox.addActionListener(new ActionListener() { |
187 | public void actionPerformed(ActionEvent e) { |
188 | boolean flag = ((JCheckBox)e.getSource()).isSelected(); |
189 | tableView.setRowSelectionAllowed(flag); ; |
190 | tableView.repaint(); |
191 | } |
192 | }); |
193 | |
194 | // Show that row/column selections are related |
195 | relatedComponents.removeAllElements(); |
196 | relatedComponents.add(isColumnSelectionAllowedCheckBox); |
197 | relatedComponents.add(isRowSelectionAllowedCheckBox); |
198 | buildAccessibleGroup(relatedComponents); |
199 | |
200 | /* |
201 | isRowAndColumnSelectionAllowedCheckBox = new JCheckBox(getString("TableDemo.cell_selection"), false); |
202 | column2.add(isRowAndColumnSelectionAllowedCheckBox); |
203 | isRowAndColumnSelectionAllowedCheckBox.addActionListener(new ActionListener() { |
204 | public void actionPerformed(ActionEvent e) { |
205 | boolean flag = ((JCheckBox)e.getSource()).isSelected(); |
206 | tableView.setCellSelectionEnabled(flag); ; |
207 | tableView.repaint(); |
208 | } |
209 | }); |
210 | */ |
211 | |
212 | rowHeightLabel = new JLabel(getString("TableDemo.row_height_colon")); |
213 | column2.add(rowHeightLabel); |
214 | |
215 | rowHeightSlider = new JSlider(JSlider.HORIZONTAL, 5, 100, INITIAL_ROWHEIGHT); |
216 | rowHeightSlider.getAccessibleContext().setAccessibleName(getString("TableDemo.row_height")); |
217 | rowHeightLabel.setLabelFor(rowHeightSlider); |
218 | column2.add(rowHeightSlider); |
219 | rowHeightSlider.addChangeListener(new ChangeListener() { |
220 | public void stateChanged(ChangeEvent e) { |
221 | int height = ((JSlider)e.getSource()).getValue(); |
222 | tableView.setRowHeight(height); |
223 | tableView.repaint(); |
224 | } |
225 | }); |
226 | |
227 | controlPanel.add(column2); |
228 | |
229 | // Show that spacing controls are related |
230 | relatedComponents.removeAllElements(); |
231 | relatedComponents.add(interCellSpacingSlider); |
232 | relatedComponents.add(rowHeightSlider); |
233 | buildAccessibleGroup(relatedComponents); |
234 | |
235 | // Create the table. |
236 | tableAggregate = createTable(); |
237 | getDemoPanel().add(tableAggregate, BorderLayout.CENTER); |
238 | |
239 | |
240 | // ComboBox for selection modes. |
241 | JPanel selectMode = new JPanel(); |
242 | column3.setLayout(new ColumnLayout()); |
243 | selectMode.setBorder(new TitledBorder(getString("TableDemo.selection_mode"))); |
244 | |
245 | |
246 | selectionModeComboBox = new JComboBox(); |
247 | selectionModeComboBox.addItem(getString("TableDemo.single")); |
248 | selectionModeComboBox.addItem(getString("TableDemo.one_range")); |
249 | selectionModeComboBox.addItem(getString("TableDemo.multiple_ranges")); |
250 | selectionModeComboBox.setSelectedIndex(tableView.getSelectionModel().getSelectionMode()); |
251 | selectionModeComboBox.addItemListener(new ItemListener() { |
252 | public void itemStateChanged(ItemEvent e) { |
253 | JComboBox source = (JComboBox)e.getSource(); |
254 | tableView.setSelectionMode(source.getSelectedIndex()); |
255 | } |
256 | }); |
257 | |
258 | selectMode.add(selectionModeComboBox); |
259 | column3.add(selectMode); |
260 | |
261 | // Combo box for table resize mode. |
262 | |
263 | JPanel resizeMode = new JPanel(); |
264 | |
265 | resizeMode.setBorder(new TitledBorder(getString("TableDemo.autoresize_mode"))); |
266 | |
267 | |
268 | resizeModeComboBox = new JComboBox(); |
269 | resizeModeComboBox.addItem(getString("TableDemo.off")); |
270 | resizeModeComboBox.addItem(getString("TableDemo.column_boundries")); |
271 | resizeModeComboBox.addItem(getString("TableDemo.subsequent_columns")); |
272 | resizeModeComboBox.addItem(getString("TableDemo.last_column")); |
273 | resizeModeComboBox.addItem(getString("TableDemo.all_columns")); |
274 | resizeModeComboBox.setSelectedIndex(tableView.getAutoResizeMode()); |
275 | resizeModeComboBox.addItemListener(new ItemListener() { |
276 | public void itemStateChanged(ItemEvent e) { |
277 | JComboBox source = (JComboBox)e.getSource(); |
278 | tableView.setAutoResizeMode(source.getSelectedIndex()); |
279 | } |
280 | }); |
281 | |
282 | resizeMode.add(resizeModeComboBox); |
283 | column3.add(resizeMode); |
284 | |
285 | controlPanel.add(column3); |
286 | |
287 | setTableControllers(); // Set accessibility information |
288 | |
289 | } // TableDemo() |
290 | |
291 | /** |
292 | * Sets the Accessibility MEMBER_OF property to denote that |
293 | * these components work together as a group. Each object |
294 | * is set to be a MEMBER_OF an array that contains all of |
295 | * the objects in the group, including itself. |
296 | * |
297 | * @param components The list of objects that are related |
298 | */ |
299 | void buildAccessibleGroup(Vector components) { |
300 | |
301 | AccessibleContext context = null; |
302 | int numComponents = components.size(); |
303 | Object[] group = components.toArray(); |
304 | Object object = null; |
305 | for (int i = 0; i < numComponents; ++i) { |
306 | object = components.elementAt(i); |
307 | if (object instanceof Accessible) { |
308 | context = ((Accessible)components.elementAt(i)). |
309 | getAccessibleContext(); |
310 | context.getAccessibleRelationSet().add( |
311 | new AccessibleRelation( |
312 | AccessibleRelation.MEMBER_OF, group)); |
313 | } |
314 | } |
315 | } // buildAccessibleGroup() |
316 | |
317 | /** |
318 | * This sets CONTROLLER_FOR on the controls that manipulate the |
319 | * table and CONTROLLED_BY relationships on the table to point |
320 | * back to the controllers. |
321 | */ |
322 | private void setTableControllers() { |
323 | |
324 | // Set up the relationships to show what controls the table |
325 | setAccessibleController(isColumnReorderingAllowedCheckBox, |
326 | tableAggregate); |
327 | setAccessibleController(showHorizontalLinesCheckBox, |
328 | tableAggregate); |
329 | setAccessibleController(showVerticalLinesCheckBox, |
330 | tableAggregate); |
331 | setAccessibleController(isColumnSelectionAllowedCheckBox, |
332 | tableAggregate); |
333 | setAccessibleController(isRowSelectionAllowedCheckBox, |
334 | tableAggregate); |
335 | setAccessibleController(interCellSpacingSlider, |
336 | tableAggregate); |
337 | setAccessibleController(rowHeightSlider, |
338 | tableAggregate); |
339 | setAccessibleController(selectionModeComboBox, |
340 | tableAggregate); |
341 | setAccessibleController(resizeModeComboBox, |
342 | tableAggregate); |
343 | } // setTableControllers() |
344 | |
345 | /** |
346 | * Sets up accessibility relationships to denote that one |
347 | * object controls another. The CONTROLLER_FOR property is |
348 | * set on the controller object, and the CONTROLLED_BY |
349 | * property is set on the target object. |
350 | */ |
351 | private void setAccessibleController(JComponent controller, |
352 | JComponent target) { |
353 | AccessibleRelationSet controllerRelations = |
354 | controller.getAccessibleContext().getAccessibleRelationSet(); |
355 | AccessibleRelationSet targetRelations = |
356 | target.getAccessibleContext().getAccessibleRelationSet(); |
357 | |
358 | controllerRelations.add( |
359 | new AccessibleRelation( |
360 | AccessibleRelation.CONTROLLER_FOR, target)); |
361 | targetRelations.add( |
362 | new AccessibleRelation( |
363 | AccessibleRelation.CONTROLLED_BY, controller)); |
364 | } // setAccessibleController() |
365 | |
366 | public JScrollPane createTable() { |
367 | |
368 | // final |
369 | final String[] names = { |
370 | getString("TableDemo.first_name"), |
371 | getString("TableDemo.last_name"), |
372 | getString("TableDemo.favorite_color"), |
373 | getString("TableDemo.favorite_movie"), |
374 | getString("TableDemo.favorite_number"), |
375 | getString("TableDemo.favorite_food") |
376 | }; |
377 | |
378 | ImageIcon apple = createImageIcon("ImageClub/food/apple.jpg", getString("TableDemo.apple")); |
379 | ImageIcon asparagus = createImageIcon("ImageClub/food/asparagus.jpg", getString("TableDemo.asparagus")); |
380 | ImageIcon banana = createImageIcon("ImageClub/food/banana.jpg", getString("TableDemo.banana")); |
381 | ImageIcon broccoli = createImageIcon("ImageClub/food/broccoli.jpg", getString("TableDemo.broccoli")); |
382 | ImageIcon cantaloupe = createImageIcon("ImageClub/food/cantaloupe.jpg", getString("TableDemo.cantaloupe")); |
383 | ImageIcon carrot = createImageIcon("ImageClub/food/carrot.jpg", getString("TableDemo.carrot")); |
384 | ImageIcon corn = createImageIcon("ImageClub/food/corn.jpg", getString("TableDemo.corn")); |
385 | ImageIcon grapes = createImageIcon("ImageClub/food/grapes.jpg", getString("TableDemo.grapes")); |
386 | ImageIcon grapefruit = createImageIcon("ImageClub/food/grapefruit.jpg", getString("TableDemo.grapefruit")); |
387 | ImageIcon kiwi = createImageIcon("ImageClub/food/kiwi.jpg", getString("TableDemo.kiwi")); |
388 | ImageIcon onion = createImageIcon("ImageClub/food/onion.jpg", getString("TableDemo.onion")); |
389 | ImageIcon pear = createImageIcon("ImageClub/food/pear.jpg", getString("TableDemo.pear")); |
390 | ImageIcon peach = createImageIcon("ImageClub/food/peach.jpg", getString("TableDemo.peach")); |
391 | ImageIcon pepper = createImageIcon("ImageClub/food/pepper.jpg", getString("TableDemo.pepper")); |
392 | ImageIcon pickle = createImageIcon("ImageClub/food/pickle.jpg", getString("TableDemo.pickle")); |
393 | ImageIcon pineapple = createImageIcon("ImageClub/food/pineapple.jpg", getString("TableDemo.pineapple")); |
394 | ImageIcon raspberry = createImageIcon("ImageClub/food/raspberry.jpg", getString("TableDemo.raspberry")); |
395 | ImageIcon sparegrass = createImageIcon("ImageClub/food/asparagus.jpg", getString("TableDemo.sparegrass")); |
396 | ImageIcon strawberry = createImageIcon("ImageClub/food/strawberry.jpg", getString("TableDemo.strawberry")); |
397 | ImageIcon tomato = createImageIcon("ImageClub/food/tomato.jpg", getString("TableDemo.tomato")); |
398 | ImageIcon watermelon = createImageIcon("ImageClub/food/watermelon.jpg", getString("TableDemo.watermelon")); |
399 | |
400 | NamedColor aqua = new NamedColor(new Color(127, 255, 212), getString("TableDemo.aqua")); |
401 | NamedColor beige = new NamedColor(new Color(245, 245, 220), getString("TableDemo.beige")); |
402 | NamedColor black = new NamedColor(Color.black, getString("TableDemo.black")); |
403 | NamedColor blue = new NamedColor(new Color(0, 0, 222), getString("TableDemo.blue")); |
404 | NamedColor eblue = new NamedColor(Color.blue, getString("TableDemo.eblue")); |
405 | NamedColor jfcblue = new NamedColor(new Color(204, 204, 255), getString("TableDemo.jfcblue")); |
406 | NamedColor jfcblue2 = new NamedColor(new Color(153, 153, 204), getString("TableDemo.jfcblue2")); |
407 | NamedColor cybergreen = new NamedColor(Color.green.darker().brighter(), getString("TableDemo.cybergreen")); |
408 | NamedColor darkgreen = new NamedColor(new Color(0, 100, 75), getString("TableDemo.darkgreen")); |
409 | NamedColor forestgreen = new NamedColor(Color.green.darker(), getString("TableDemo.forestgreen")); |
410 | NamedColor gray = new NamedColor(Color.gray, getString("TableDemo.gray")); |
411 | NamedColor green = new NamedColor(Color.green, getString("TableDemo.green")); |
412 | NamedColor orange = new NamedColor(new Color(255, 165, 0), getString("TableDemo.orange")); |
413 | NamedColor purple = new NamedColor(new Color(160, 32, 240), getString("TableDemo.purple")); |
414 | NamedColor red = new NamedColor(Color.red, getString("TableDemo.red")); |
415 | NamedColor rustred = new NamedColor(Color.red.darker(), getString("TableDemo.rustred")); |
416 | NamedColor sunpurple = new NamedColor(new Color(100, 100, 255), getString("TableDemo.sunpurple")); |
417 | NamedColor suspectpink = new NamedColor(new Color(255, 105, 180), getString("TableDemo.suspectpink")); |
418 | NamedColor turquoise = new NamedColor(new Color(0, 255, 255), getString("TableDemo.turquoise")); |
419 | NamedColor violet = new NamedColor(new Color(238, 130, 238), getString("TableDemo.violet")); |
420 | NamedColor yellow = new NamedColor(Color.yellow, getString("TableDemo.yellow")); |
421 | |
422 | // Create the dummy data (a few rows of names) |
423 | final Object[][] data = { |
424 | {"Mike", "Albers", green, getString("TableDemo.brazil"), new Double(44.0), strawberry}, |
425 | {"Mark", "Andrews", blue, getString("TableDemo.curse"), new Double(3), grapes}, |
426 | {"Brian", "Beck", black, getString("TableDemo.bluesbros"), new Double(2.7182818285), raspberry}, |
427 | {"Lara", "Bunni", red, getString("TableDemo.airplane"), new Double(15), strawberry}, |
428 | {"Roger", "Brinkley", blue, getString("TableDemo.man"), new Double(13), peach}, |
429 | {"Brent", "Christian", black, getString("TableDemo.bladerunner"), new Double(23), broccoli}, |
430 | {"Mark", "Davidson", darkgreen, getString("TableDemo.brazil"), new Double(27), asparagus}, |
431 | {"Jeff", "Dinkins", blue, getString("TableDemo.ladyvanishes"), new Double(8), kiwi}, |
432 | {"Ewan", "Dinkins", yellow, getString("TableDemo.bugs"), new Double(2), strawberry}, |
433 | {"Amy", "Fowler", violet, getString("TableDemo.reservoir"), new Double(3), raspberry}, |
434 | {"Hania", "Gajewska", purple, getString("TableDemo.jules"), new Double(5), raspberry}, |
435 | {"David", "Geary", blue, getString("TableDemo.pulpfiction"), new Double(3), watermelon}, |
436 | // {"James", "Gosling", pink, getString("TableDemo.tennis"), new Double(21), donut}, |
437 | {"Eric", "Hawkes", blue, getString("TableDemo.bladerunner"), new Double(.693), pickle}, |
438 | {"Shannon", "Hickey", green, getString("TableDemo.shawshank"), new Integer(2), grapes}, |
439 | {"Earl", "Johnson", green, getString("TableDemo.pulpfiction"), new Double(8), carrot}, |
440 | {"Robi", "Kahn", green, getString("TableDemo.goodfellas"), new Double(89), apple}, |
441 | {"Robert", "Kim", blue, getString("TableDemo.mohicans"), new Double(655321), strawberry}, |
442 | {"Janet", "Koenig", turquoise, getString("TableDemo.lonestar"), new Double(7), peach}, |
443 | {"Jeff", "Kesselman", blue, getString("TableDemo.stuntman"), new Double(17), pineapple}, |
444 | {"Onno", "Kluyt", orange, getString("TableDemo.oncewest"), new Double(8), broccoli}, |
445 | {"Peter", "Korn", sunpurple, getString("TableDemo.musicman"), new Double(12), sparegrass}, |
446 | |
447 | {"Rick", "Levenson", black, getString("TableDemo.harold"), new Double(1327), raspberry}, |
448 | {"Brian", "Lichtenwalter", jfcblue, getString("TableDemo.fifthelement"), new Double(22), pear}, |
449 | {"Malini", "Minasandram", beige, getString("TableDemo.joyluck"), new Double(9), corn}, |
450 | {"Michael", "Martak", green, getString("TableDemo.city"), new Double(3), strawberry}, |
451 | {"David", "Mendenhall", forestgreen, getString("TableDemo.schindlerslist"), new Double(7), peach}, |
452 | {"Phil", "Milne", suspectpink, getString("TableDemo.withnail"), new Double(3), banana}, |
453 | {"Lynn", "Monsanto", cybergreen, getString("TableDemo.dasboot"), new Double(52), peach}, |
454 | {"Hans", "Muller", rustred, getString("TableDemo.eraserhead"), new Double(0), pineapple}, |
455 | {"Joshua", "Outwater", blue, getString("TableDemo.labyrinth"), new Integer(3), pineapple}, |
456 | {"Tim", "Prinzing", blue, getString("TableDemo.firstsight"), new Double(69), pepper}, |
457 | {"Raj", "Premkumar", jfcblue2, getString("TableDemo.none"), new Double(7), broccoli}, |
458 | {"Howard", "Rosen", green, getString("TableDemo.defending"), new Double(7), strawberry}, |
459 | {"Ray", "Ryan", black, getString("TableDemo.buckaroo"), |
460 | new Double(3.141592653589793238462643383279502884197169399375105820974944), banana}, |
461 | {"Georges", "Saab", aqua, getString("TableDemo.bicycle"), new Double(290), cantaloupe}, |
462 | {"Tom", "Santos", blue, getString("TableDemo.spinaltap"), new Double(241), pepper}, |
463 | {"Rich", "Schiavi", blue, getString("TableDemo.repoman"), new Double(0xFF), pepper}, |
464 | {"Nancy", "Schorr", green, getString("TableDemo.fifthelement"), new Double(47), watermelon}, |
465 | {"Keith", "Sprochi", darkgreen, getString("TableDemo.2001"), new Integer(13), watermelon}, |
466 | {"Matt", "Tucker", eblue, getString("TableDemo.starwars"), new Integer(2), broccoli}, |
467 | {"Dimitri", "Trembovetsky", red, getString("TableDemo.aliens"), new Integer(222), tomato}, |
468 | {"Scott", "Violet", violet, getString("TableDemo.raiders"), new Integer(-97), banana}, |
469 | {"Kathy", "Walrath", blue, getString("TableDemo.thinman"), new Integer(8), pear}, |
470 | {"Nathan", "Walrath", black, getString("TableDemo.chusingura"), new Integer(3), grapefruit}, |
471 | {"Steve", "Wilson", green, getString("TableDemo.raiders"), new Integer(7), onion}, |
472 | {"Kathleen", "Zelony", gray, getString("TableDemo.dog"), new Integer(13), grapes} |
473 | }; |
474 | |
475 | // Create a model of the data. |
476 | TableModel dataModel = new AbstractTableModel() { |
477 | public int getColumnCount() { return names.length; } |
478 | public int getRowCount() { return data.length;} |
479 | public Object getValueAt(int row, int col) {return data[row][col];} |
480 | public String getColumnName(int column) {return names[column];} |
481 | public Class getColumnClass(int c) {return getValueAt(0, c).getClass();} |
482 | public boolean isCellEditable(int row, int col) {return col != 5;} |
483 | public void setValueAt(Object aValue, int row, int column) { data[row][column] = aValue; } |
484 | }; |
485 | |
486 | |
487 | // Create the table |
488 | tableView = new JTable(dataModel); |
489 | |
490 | // Show colors by rendering them in their own color. |
491 | DefaultTableCellRenderer colorRenderer = new DefaultTableCellRenderer() { |
492 | public void setValue(Object value) { |
493 | if (value instanceof NamedColor) { |
494 | NamedColor c = (NamedColor) value; |
495 | setBackground(c); |
496 | setForeground(c.getTextColor()); |
497 | setText(c.toString()); |
498 | } else { |
499 | super.setValue(value); |
500 | } |
501 | } |
502 | }; |
503 | |
504 | // Create a combo box to show that you can use one in a table. |
505 | JComboBox comboBox = new JComboBox(); |
506 | comboBox.addItem(aqua); |
507 | comboBox.addItem(beige); |
508 | comboBox.addItem(black); |
509 | comboBox.addItem(blue); |
510 | comboBox.addItem(eblue); |
511 | comboBox.addItem(jfcblue); |
512 | comboBox.addItem(jfcblue2); |
513 | comboBox.addItem(cybergreen); |
514 | comboBox.addItem(darkgreen); |
515 | comboBox.addItem(forestgreen); |
516 | comboBox.addItem(gray); |
517 | comboBox.addItem(green); |
518 | comboBox.addItem(orange); |
519 | comboBox.addItem(purple); |
520 | comboBox.addItem(red); |
521 | comboBox.addItem(rustred); |
522 | comboBox.addItem(sunpurple); |
523 | comboBox.addItem(suspectpink); |
524 | comboBox.addItem(turquoise); |
525 | comboBox.addItem(violet); |
526 | comboBox.addItem(yellow); |
527 | |
528 | TableColumn colorColumn = tableView.getColumn(getString("TableDemo.favorite_color")); |
529 | // Use the combo box as the editor in the "Favorite Color" column. |
530 | colorColumn.setCellEditor(new DefaultCellEditor(comboBox)); |
531 | |
532 | colorRenderer.setHorizontalAlignment(JLabel.CENTER); |
533 | colorColumn.setCellRenderer(colorRenderer); |
534 | |
535 | tableView.setRowHeight(INITIAL_ROWHEIGHT); |
536 | |
537 | scrollpane = new JScrollPane(tableView); |
538 | return scrollpane; |
539 | } |
540 | |
541 | class NamedColor extends Color { |
542 | String name; |
543 | public NamedColor(Color color, String name) { |
544 | super(color.getRGB()); |
545 | this.name = name; |
546 | } |
547 | |
548 | public Color getTextColor() { |
549 | int r = getRed(); |
550 | int g = getGreen(); |
551 | int b = getBlue(); |
552 | if(r > 240 || g > 240) { |
553 | return Color.black; |
554 | } else { |
555 | return Color.white; |
556 | } |
557 | } |
558 | |
559 | public String toString() { |
560 | return name; |
561 | } |
562 | } |
563 | |
564 | class ColumnLayout implements LayoutManager { |
565 | int xInset = 5; |
566 | int yInset = 5; |
567 | int yGap = 2; |
568 | |
569 | public void addLayoutComponent(String s, Component c) {} |
570 | |
571 | public void layoutContainer(Container c) { |
572 | Insets insets = c.getInsets(); |
573 | int height = yInset + insets.top; |
574 | |
575 | Component[] children = c.getComponents(); |
576 | Dimension compSize = null; |
577 | for (int i = 0; i < children.length; i++) { |
578 | compSize = children[i].getPreferredSize(); |
579 | children[i].setSize(compSize.width, compSize.height); |
580 | children[i].setLocation( xInset + insets.left, height); |
581 | height += compSize.height + yGap; |
582 | } |
583 | |
584 | } |
585 | |
586 | public Dimension minimumLayoutSize(Container c) { |
587 | Insets insets = c.getInsets(); |
588 | int height = yInset + insets.top; |
589 | int width = 0 + insets.left + insets.right; |
590 | |
591 | Component[] children = c.getComponents(); |
592 | Dimension compSize = null; |
593 | for (int i = 0; i < children.length; i++) { |
594 | compSize = children[i].getPreferredSize(); |
595 | height += compSize.height + yGap; |
596 | width = Math.max(width, compSize.width + insets.left + insets.right + xInset*2); |
597 | } |
598 | height += insets.bottom; |
599 | return new Dimension( width, height); |
600 | } |
601 | |
602 | public Dimension preferredLayoutSize(Container c) { |
603 | return minimumLayoutSize(c); |
604 | } |
605 | |
606 | public void removeLayoutComponent(Component c) {} |
607 | } |
608 | |
609 | |
610 | } |