1
2 package edu.psu.geovista.app.table;
3 import javax.swing.*;
4 import javax.swing.event.*;
5 import javax.swing.table.*;
6 import javax.swing.tree.*;
7 import java.awt.*;
8 import java.awt.event.*;
9 import java.util.*;
10 class ControlPanel extends JPanel implements ActionListener,ItemListener
11 {
12 //Control c;
13 TableBrowser myTB;
14 int token=0;
15 int tempNumber=1;
16 JTable table=null;
17 JInternalFrame frame=null;
18 // the following variable is for lock
19 TableColumn firstColumn=null;
20 JTable headerTable=null;
21 TableColumnModel tcm=null;
22 JScrollPane scrollPane=null;
23 Object[] selectionModes = new Object[] {
24 "SINGLE",
25 "SINGLE_INTERVAL",
26 "MULTIPLE_INTERVAL",
27 };
28 int[] selectionConstants = {
29 ListSelectionModel.SINGLE_SELECTION,
30 ListSelectionModel.SINGLE_INTERVAL_SELECTION,
31 ListSelectionModel.MULTIPLE_INTERVAL_SELECTION,
32 };
33 // define the sub panel for the control
34 JPanel selectionPanel=new JPanel(),
35 selectablesPanel=new JPanel(),
36 operationPanel=new JPanel(),
37 sortPanel=new JPanel(),
38 viewPanel=new JPanel();
39
40 JCheckBox[] selectables=new JCheckBox[]
41 {
42 new JCheckBox("Row",true),
43 new JCheckBox("Col",true),
44 new JCheckBox("Cell"),
45 };
46
47 JComboBox modeCombo = new JComboBox(selectionModes);
48 JButton deleteButton=new JButton("Del");
49 JButton[] sortOperations=new JButton[]
50 {
51 new JButton("MAX"),
52 new JButton("MIN"),
53 new JButton("AVE"),
54 new JButton("%"),
55 };
56
57
58
59 JButton[] zooms=new JButton[]
60 {
61 new JButton("+"),
62 new JButton("-")
63
64 };
65 //JButton custom=new JButton("newTB");
66 JButton sendButton=new JButton("Send");
67
68 JCheckBox firstColumnLocked=new JCheckBox("Lock");
69
70 public JCheckBox[] getTableMode()
71 {
72 return selectables;
73 }
74
75 public void iniTable()
76 {
77
78
79 table=myTB.getCurrentTable();
80 //frame=myTB.getCurrentFrame();
81 tcm = table.getColumnModel();
82 headerTable=new JTable(table.getModel());
83 headerTable.getTableHeader().setReorderingAllowed(false);
84 headerTable.setRowHeight(table.getRowHeight());
85 MyTools.setActualPreferredColumnWidths(table);
86 MyTools.setActualPreferredColumnWidths(headerTable);
87 firstColumn=tcm.getColumn(0);
88 headerTable.setPreferredScrollableViewportSize(
89 new Dimension(firstColumn.getPreferredWidth() +
90 table.getColumnModel().getColumnMargin(),0));
91 scrollPane = (JScrollPane)
92 SwingUtilities.getAncestorOfClass(
93 JScrollPane.class, table);
94
95 setToken(1);
96
97 }
98
99 public int getToken()
100 {
101 return token;
102 }
103 public void setToken(int tk)
104 {
105 token=tk;
106 }
107
108 public ControlPanel( final TableBrowser tb) {
109
110 initialControlPanel();
111
112
113 this.myTB=tb;
114 for(int i=0;i<selectables.length;i++)
115 {
116 add(selectables[i]);
117 selectables[i].addItemListener(this);
118
119 }
120 add(firstColumnLocked);
121
122 add(deleteButton);
123 for(int i=0;i<zooms.length;i++)
124 {
125 add(zooms[i]);
126 zooms[i].addActionListener(new ActionListener(){
127 public void actionPerformed(ActionEvent e)
128 {
129 String name=e.getActionCommand();
130 if(name.equals("+"))
131 {
132 if(selectables[2].isSelected())
133 {
134 myTB.resizeRowOfCurrentTable(2,1);
135 myTB.resizeColumnOfCurrentTable(2,1);
136
137 }
138 else if(selectables[0].isSelected())
139 {
140 myTB.resizeRowOfCurrentTable(2,1);
141 }
142 else if(selectables[1].isSelected())
143 {
144 myTB.resizeColumnOfCurrentTable(2,1);
145
146 }
147 }
148 else if (name.equals("-"))
149 {
150 if(selectables[2].isSelected())
151 {
152 myTB.resizeRowOfCurrentTable(1,2);
153 myTB.resizeColumnOfCurrentTable(1,2);
154 }
155 else if(selectables[0].isSelected())
156 {
157 myTB.resizeRowOfCurrentTable(1,2);
158 }
159 else if(selectables[1].isSelected())
160 {
161 myTB.resizeColumnOfCurrentTable(1,2);
162
163 }
164
165 }
166 }
167 });
168
169
170 }
171
172 for(int i=0;i<sortOperations.length;i++)
173 {
174 add(sortOperations[i]);
175 sortOperations[i].addActionListener(new ActionListener(){
176 public void actionPerformed(ActionEvent e)
177 {
178 String name=e.getActionCommand();
179
180 if(selectables[1].isSelected())
181 {
182 columnCaculation(name);
183 }
184 else
185 {
186 JOptionPane.showMessageDialog(myTB,"please choose column action.");
187 }
188
189 }
190 });
191
192 }
193
194
195 //add(custom);
196 add(sendButton);
197 /*custom.addActionListener(new ActionListener(){
198 public void actionPerformed(ActionEvent e){
199 showTheDialog();
200 }
201 });*/
202
203 sendButton.addActionListener(new ActionListener(){
204 public void actionPerformed(ActionEvent e){
205 send();
206 ControlPanel.this.myTB.stateChanged(new ChangeEvent(sendButton));
207 }
208
209 });
210
211
212
213
214
215
216 firstColumnLocked.addActionListener(new ActionListener() {
217 public void actionPerformed(ActionEvent e) {
218 int tk=getToken();
219 if(tk==0)
220 {
221 iniTable();
222 }
223
224
225 // headerTable.getTableHeader().setReorderingAllowed(false);
226
227 if(firstColumnLocked.isSelected()) {
228 tcm.removeColumn(firstColumn);
229 scrollPane.setRowHeaderView(headerTable);
230 scrollPane.setCorner(
231 JScrollPane.UPPER_LEFT_CORNER,
232 headerTable.getTableHeader());
233 }
234 // else if(!firstColumnLocked.isSelected()){
235 else {
236 tcm.addColumn(firstColumn);
237 int numCols = tcm.getColumnCount();
238 tcm.moveColumn(numCols-1, 0);
239 scrollPane.setRowHeaderView(null);
240 setToken(0);
241
242 }
243 }
244 });
245
246
247
248
249 initializeControls();
250
251
252 }
253 private void initializeControls() {
254 int mode =
255 myTB.getCurrentTable().getSelectionModel().getSelectionMode();
256
257 if(mode == ListSelectionModel.SINGLE_SELECTION) {
258 modeCombo.setSelectedIndex(0);
259 }
260 else if(mode ==
261 ListSelectionModel.SINGLE_INTERVAL_SELECTION) {
262 modeCombo.setSelectedIndex(1);
263 }
264 else if(mode ==
265 ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) {
266 modeCombo.setSelectedIndex(2);
267 }
268
269 selectables[0].setSelected(true);
270 selectables[1].setSelected(true);
271 selectables[2].setSelected(myTB.getCurrentTable().getCellSelectionEnabled());
272 deleteButton.addActionListener(new ActionListener(){
273 public void actionPerformed(ActionEvent e){
274 int temp=0;
275 if(selectables[0].isSelected())
276 {
277 int[] cn=myTB.getCurrentTable().getSelectedRows();
278 String name=null;
279
280 for( int i=0;i<cn.length;i++)
281 {
282 temp=0;
283 if(cn[i]!=0)
284 temp=cn[i]-i;
285
286 ((DefaultTableModel)(myTB.getCurrentTable().getModel())).removeRow(temp);
287 }
288
289
290 }
291 else if(selectables[1].isSelected())
292 {
293 int[] cn=myTB.getCurrentTable().getSelectedColumns();
294 String name=null;
295 for( int i=0;i<cn.length;i++)
296
297 {
298
299 name=myTB.getCurrentTable().getColumnName(cn[i]-i);
300 myTB.getCurrentTable().getColumnModel().removeColumn(myTB.getCurrentTable().getColumn(name));
301
302 }
303
304 }
305
306 }
307 });
308
309 }
310 public void itemStateChanged(ItemEvent e){
311
312 JCheckBox checkBox=(JCheckBox)e.getSource();
313 boolean b=checkBox.isSelected();
314 if(checkBox==selectables[0])
315 {
316 myTB.getCurrentTable().setRowSelectionAllowed(b);
317
318 }
319 else if(checkBox==selectables[1])
320 {
321 myTB.getCurrentTable().setColumnSelectionAllowed(b);
322
323 }
324 else if(checkBox==selectables[2])
325 {
326 myTB.getCurrentTable().setCellSelectionEnabled(b);
327 }
328
329 }
330
331 public void actionPerformed(ActionEvent e) {
332 int index = modeCombo.getSelectedIndex();
333 myTB.getCurrentTable().setSelectionMode(
334 selectionConstants[index]);
335 }
336
337
338 private void showTheDialog()
339 {
340 /*CustomDialog customPane=new CustomDialog(myTB);
341 customPane.initialize();
342 customPane.pack();
343 customPane.setLocationRelativeTo(myTB);
344 customPane.show();*/
345 }
346 private void send()
347 {
348 myTB.fireChangeEvent();
349 }
350 private void buildSubTable()
351 {
352 //not supported now
353 //build the sub table from rows selected by users
354 /*JTable subTable=makeSubtable();
355 String title="temprary subtable"+tempNumber;
356 tempNumber++;
357 JTree tree=myTB.getTOCTree();
358 DefaultMutableTreeNode newNode=new DefaultMutableTreeNode(title);
359 newNode.setUserObject(new Tableinfo(subTable,title));
360 DefaultMutableTreeNode parentNode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
361 if(parentNode==null||parentNode.isLeaf())
362 {
363 JOptionPane.showMessageDialog(myTB,"please choose a NONE LEAF node in the tree to save the sub table.");
364 tempNumber--;
365
366 return;
367 }
368 DefaultTreeModel treeModel=(DefaultTreeModel)tree.getModel();
369 treeModel.insertNodeInto(newNode,parentNode,0);
370 myTB.updateCurrentTable(title,subTable);
371 myTB.updateTOCTree(tree);
372 */
373 }
374
375 /*public JTable makeSubtable()
376 {
377 JTable parentTable=myTB.getCurrentTable(),
378 subtable=null;
379
380 //may be some question
381 DefaultTableModel ptm=(DefaultTableModel)(parentTable.getModel());
382
383
384 TableColumnModel ptcm=parentTable.getColumnModel();
385 int columnCount=parentTable.getColumnCount();
386
387 Vector columnVector=new Vector();
388 for(int ii=0;ii<columnCount;ii++)
389 {
390 columnVector.add(ptm.getColumnName(ii));
391 }
392
393 int[] rowIndex=parentTable.getSelectedRows();
394
395 Vector tableData=new Vector();
396
397 for(int i=0;i<rowIndex.length;i++)
398 {
399 Vector temp=new Vector();
400 for(int j=0;j<columnCount;j++)
401 {
402 temp.add(parentTable.getValueAt(rowIndex[i],j));
403 }
404 tableData.add(temp);
405 }
406
407 subtable=new JTable(new DefaultTableModel(tableData,columnVector));
408 // table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
409 TableColumnModel myTcm=subtable.getColumnModel();
410
411 for(int jj=0;jj<columnCount;jj++)
412 {
413 TableColumn tc=myTcm.getColumn(jj);
414 tc.setCellRenderer(ptcm.getColumn(jj).getCellRenderer());
415 tc.setCellEditor(ptcm.getColumn(jj).getCellEditor());
416 }
417
418 MyTools.setActualPreferredColumnWidths(subtable);
419 subtable.setRowHeight(parentTable.getRowHeight());
420
421 return subtable;
422
423
424 }*/
425
426 private void columnCaculation(String index)
427 {
428 String resultString="";
429 JTable tb=myTB.getCurrentTable();
430 DefaultTableModel tm=(DefaultTableModel)tb.getModel();
431 int rowCount=tb.getModel().getRowCount();
432 int columnNum=myTB.getCurrentTable().getSelectedColumn();
433 String tempString="";
434 double tempNum=0.0;
435 double resultNum=0.0;
436 int theNum=0;
437 int totalRow=rowCount;
438 String oldString=null,newString=null;
439 // JComponent myCell=null;
440 Dimension size=null;
441
442
443 if(index=="MAX")
444 {
445 resultNum=0.0;
446
447 for(int i=0;i<rowCount;i++)
448 {
449 tempNum=0.0;
450 tempString=(String)tm.getValueAt(i,columnNum);
451 try
452 {
453 tempNum=Double.parseDouble(tempString);
454 }catch(Exception e){ };
455
456 if(tempNum>resultNum)
457 {
458 resultNum=tempNum;
459 theNum=i;
460 }
461 }
462 resultString=resultNum +"\n At row "+theNum;
463 //identify the max value
464 oldString=(String)tm.getValueAt(theNum,columnNum);
465 newString="--> "+oldString;
466 tm.setValueAt(newString,theNum,columnNum);
467
468
469 //move the viewport to the current value
470 scrolTable(theNum);
471
472 }
473 else if(index=="MIN")
474 {
475 resultNum=100000000.0;
476 for(int i=0;i<rowCount;i++)
477 {
478 tempString=(String)tm.getValueAt(i,columnNum);
479 tempNum=100000000.0;
480 try
481 {
482 tempNum=Double.parseDouble(tempString);
483 }catch(Exception e){ };
484
485 if(tempNum<resultNum)
486 {
487 resultNum=tempNum;
488 theNum=i;
489 }
490 }
491 resultString=resultNum+"\n At row "+theNum;
492 oldString=(String)tm.getValueAt(theNum,columnNum);
493 newString="--> "+oldString;
494 tm.setValueAt(newString,theNum,columnNum);
495
496 scrolTable(theNum);
497
498 }
499 else if(index=="AVE")
500 {
501 resultNum=0.0;
502
503 for(int i=0;i<rowCount;i++)
504 {
505 tempNum=0.0;
506 tempString=(String)tm.getValueAt(i,columnNum);
507 try
508 {
509 tempNum=Double.parseDouble(tempString);
510 }catch(Exception e){totalRow--;};
511
512 resultNum=resultNum+tempNum;
513 }
514 resultNum=resultNum/totalRow;
515 resultString="The mean is "+resultNum;
516 theNum=1;
517 oldString=(String)tm.getValueAt(theNum,columnNum);
518
519
520 }
521 else if(index=="%")
522 {
523 resultString=percentageChange();
524 theNum=1;
525 oldString=(String)tm.getValueAt(theNum,columnNum);
526
527 }
528 JOptionPane.showMessageDialog(myTB,resultString);
529 tm.setValueAt(oldString,theNum,columnNum);
530 tb.repaint();
531
532 }
533
534 private String percentageChange()
535 {
536 JTable tb=myTB.getCurrentTable();
537 DefaultTableModel tm=(DefaultTableModel)tb.getModel();
538 int rowCount=tb.getModel().getRowCount();
539 int columnNum=myTB.getCurrentTable().getSelectedColumn();
540 String result="";
541 String tempString1="";
542 double tempNum1=0.0;
543 String tempString2="";
544 double tempNum2=0.0;
545 double tempTotal=0.0;
546 double finalNum=0.0;
547 String finalString="";
548
549 if(columnNum==1||columnNum==2)
550 {
551 for(int i=0;i<rowCount;i++)
552 {
553 tempString1=(String)tm.getValueAt(i,1);
554 tempString2=(String)tm.getValueAt(i,2);
555 finalString="";
556
557 try
558 {
559 tempNum1=Double.parseDouble(tempString1);
560 tempNum2=Double.parseDouble(tempString2);
561 tempTotal=tempNum1+tempNum2;
562 if(columnNum==1)
563 {
564 finalNum=tempNum1*100.0/tempTotal;
565 }
566 else
567 {
568 finalNum=tempNum2*100.0/tempTotal;
569 }
570 finalString=finalNum+" ";
571 }catch(Exception e){ finalString="(NA)";};
572 tm.setValueAt(finalString,i,columnNum);
573 }
574 result="Succeed!";
575 }
576 else
577 {
578 result="Sorry, we have not implement this column now";
579 }
580
581 return result;
582
583
584 }
585
586
587 private void initialControlPanel()
588 {
589 sortOperations[0].setToolTipText("Maximum value for a specific column");
590 sortOperations[1].setToolTipText("Minimum value for a specific column");
591 sortOperations[2].setToolTipText("Average value for a specific column");
592 sortOperations[3].setToolTipText("Persentage of the column to a specific column");
593 zooms[0].setToolTipText("Zoom in the table");
594 zooms[1].setToolTipText("Zoom out the table");
595 deleteButton.setToolTipText("Delete one row or column");
596 //custom.setToolTipText("Custom user\'s own table");
597 sendButton.setToolTipText("Send Values to other applications");
598 selectables[0].setToolTipText("Enter ROW model");
599 selectables[1].setToolTipText("Enter COLUMN model");
600 selectables[2].setToolTipText("Enter CELL model");
601 firstColumnLocked.setToolTipText("Set the first column locked");
602
603
604
605 }
606
607 private void scrolTable(int y)
608 {
609 JScrollPane myScrollPane = (JScrollPane)SwingUtilities.getAncestorOfClass(
610 JScrollPane.class, myTB.getCurrentTable());
611 JViewport myViewport=myScrollPane.getViewport();
612 Point point= myViewport.getViewPosition();
613 if(y<0) y=0;
614
615 point.y =myTB.getCurrentTable().getRowHeight()*y;
616 myViewport.setViewPosition(point);
617 myScrollPane.setViewport(null);
618 myScrollPane.setViewport(myViewport);
619 myScrollPane.repaint();
620
621 }
622
623
624 }
This page was automatically generated by Maven