View Javadoc
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