| 1 32 33 package com.nqadmin.swingSet; 34 35 import java.awt.*; 36 import java.awt.event.*; 37 import javax.swing.*; 38 import javax.swing.event.*; 39 import javax.swing.table.*; 40 import javax.swing.border.LineBorder ; 41 import java.sql.SQLException ; 42 import java.sql.Date ; 43 import java.util.GregorianCalendar ; 44 import java.util.Calendar ; 45 import java.util.StringTokenizer ; 46 import java.util.EventObject ; 47 import java.util.Vector ; 48 import com.nqadmin.swingSet.datasources.SSRowSet; 49 50 135 136 public class SSDataGrid extends JTable { 137 138 141 protected Component messageWindow = null; 142 143 146 protected SSRowSet sSRowSet = null; 147 148 151 protected int columnCount = -1; 152 153 156 protected int rowCount = -1; 157 158 161 protected int columnWidth = 100; 162 163 166 protected SSTableModel tableModel = new SSTableModel(); 167 168 171 protected JScrollPane scrollPane = null; 173 176 protected int[] hiddenColumns = null; 177 178 181 protected String [] hiddenColumnNames = null; 182 183 186 protected boolean callExecute = true; 187 188 192 protected boolean insertion = true; 193 194 199 public SSDataGrid(SSRowSet _sSRowSet) { 200 sSRowSet = _sSRowSet; 201 init(); 202 bind(); 203 } 204 205 208 public SSDataGrid() { 209 init(); 210 } 211 212 217 public void setColumnWidth(int _columnWidth) { 218 int oldValue = columnWidth; 219 columnWidth = _columnWidth; 220 firePropertyChange("columnWidth", oldValue, columnWidth); 221 } 222 223 228 public int getColumnWidth() { 229 return columnWidth; 230 } 231 232 238 public void setMessageWindow(Component _messageWindow) { 239 Component oldValue = messageWindow; 240 messageWindow = _messageWindow; 241 firePropertyChange("messageWindow", oldValue, messageWindow); 242 tableModel.setMessageWindow(messageWindow); 243 } 244 245 251 public Component getMessageWindow() { 252 return messageWindow; 253 } 254 255 262 public void setCallExecute(boolean _callExecute) { 263 boolean oldValue = callExecute; 264 callExecute = _callExecute; 265 firePropertyChange("callExecute", oldValue, callExecute); 266 } 267 268 275 public boolean getCallExecute() { 276 return callExecute; 277 } 278 279 285 public void setInsertion(boolean _insertion) { 286 boolean oldValue = insertion; 287 insertion = _insertion; 288 firePropertyChange("insertion", oldValue, insertion); 289 tableModel.setInsertion(_insertion); 290 updateUI(); 291 } 292 293 299 public boolean getInsertion() { 300 return insertion; 301 } 302 303 312 public int[] getSelectedColumns() { 317 if (hiddenColumns == null) { 319 return super.getSelectedColumns(); 320 } 321 322 int[] selectedColumns = super.getSelectedColumns(); 324 Vector filteredColumns = new Vector (); 325 326 for (int i=0; i<selectedColumns.length; i++) { 328 boolean found = false; 329 for (int j=0; j<hiddenColumns.length; j++) { 331 if (selectedColumns[i] == hiddenColumns[j]) { 333 found = true; 334 break; 335 } 336 } 337 if (!found) { 339 filteredColumns.add(new Integer (selectedColumns[i])); 340 } 341 } 342 343 int[] result = new int[filteredColumns.size()]; 345 for (int i=0; i<filteredColumns.size(); i++) { 346 result[i] = ((Integer )filteredColumns.elementAt(i)).intValue(); 347 } 348 349 return result; 350 } 351 352 359 public int getSelectedColumnCount() { 360 int[] selectedColumns = this.getSelectedColumns(); 361 if (selectedColumns == null) { 362 return 0; 363 } 364 365 return selectedColumns.length; 366 } 367 368 374 public void setSSRowSet(SSRowSet _sSRowSet) { 375 SSRowSet oldValue = sSRowSet; 376 sSRowSet = _sSRowSet; 377 firePropertyChange("sSRowSet", oldValue, sSRowSet); 378 bind(); 379 } 381 386 public SSRowSet getSSRowSet() { 387 return sSRowSet; 388 } 389 390 397 public Component getComponent(){ 398 return scrollPane; 399 } 400 401 414 public void setDefaultValues(int[] _columnNumbers, Object [] _values) { 415 tableModel.setDefaultValues(_columnNumbers,_values); 419 } 420 421 436 public void setDefaultValues(String [] _columnNames, Object [] _values) throws SQLException { 437 438 int[] columnNumbers = null; 439 440 444 if ( _columnNames != null) { 445 columnNumbers = new int[_columnNames.length]; 446 447 for (int i=0; i< _columnNames.length;i++) { 448 columnNumbers[i] = sSRowSet.getColumnIndex(_columnNames[i]) -1 ; 449 } 450 } 451 452 tableModel.setDefaultValues(columnNumbers, _values); 453 } 454 455 465 public Object getDefaultValue(int _columnNumber) { 466 return tableModel.getDefaultValue(_columnNumber); 467 } 468 469 481 public Object getDefaultValue(String _columnName) throws SQLException { 482 int columnNumber = sSRowSet.getColumnIndex(_columnName); 483 return tableModel.getDefaultValue(columnNumber -1); 484 } 485 486 496 public void setPrimaryColumn(int _columnNumber) { 497 tableModel.setPrimaryColumn(_columnNumber); 498 } 499 500 510 public void setPrimaryColumn(String _columnName) throws SQLException { 511 int columnNumber = sSRowSet.getColumnIndex(_columnName) -1; 512 tableModel.setPrimaryColumn(columnNumber); 513 } 514 515 523 public void setSSDataValue(SSDataValue _dataValue) { 524 tableModel.setSSDataValue(_dataValue); 525 } 526 527 536 public void setDateRenderer(int _column) { 537 TableColumnModel columnModel = getColumnModel(); 538 TableColumn tableColumn = columnModel.getColumn(_column); 539 tableColumn.setCellRenderer(new DateRenderer()); 540 tableColumn.setCellEditor(new DateEditor()); 541 } 542 543 552 public void setDateRenderer(String _column) throws SQLException { 553 int column = sSRowSet.getColumnIndex(_column) -1; 554 TableColumnModel columnModel = getColumnModel(); 555 TableColumn tableColumn = columnModel.getColumn(column); 556 tableColumn.setCellRenderer(new DateRenderer()); 557 tableColumn.setCellEditor(new DateEditor()); 558 } 559 560 572 public void setComboRenderer(int _column, Object [] _displayItems, Object [] _underlyingValues) { 573 setComboRenderer(_column, _displayItems, _underlyingValues, 250); 574 } 575 576 588 public void setComboRenderer(int _column, Object [] _displayItems, Object [] _underlyingValues, int _columnWidth) { 589 setRowHeight(20); 590 TableColumnModel columnModel = getColumnModel(); 591 TableColumn tableColumn = columnModel.getColumn(_column); 592 tableColumn.setCellRenderer(new ComboRenderer(_displayItems, _underlyingValues)); 593 tableColumn.setCellEditor(new ComboEditor(_displayItems, _underlyingValues)); 594 tableColumn.setMinWidth(_columnWidth); 595 } 596 597 609 public void setComboRenderer(String _column, Object [] _displayItems, Object [] _underlyingValues) throws SQLException { 610 setComboRenderer(_column, _displayItems, _underlyingValues, 250); 611 } 612 613 626 public void setComboRenderer(String _column, Object [] _displayItems, Object [] _underlyingValues, int _columnWidth) throws SQLException { 627 int column = sSRowSet.getColumnIndex(_column)-1; 628 setComboRenderer(column, _displayItems, _underlyingValues, _columnWidth); 629 } 630 631 638 public void setCheckBoxRenderer(String _column) throws SQLException { 639 int column = sSRowSet.getColumnIndex(_column) - 1; 640 setCheckBoxRenderer(column); 641 } 642 643 650 public void setCheckBoxRenderer(int _column) throws SQLException { 651 TableColumnModel columnModel = getColumnModel(); 652 TableColumn tableColumn = columnModel.getColumn(_column); 653 tableColumn.setCellRenderer(new CheckBoxRenderer()); 654 tableColumn.setCellEditor(new CheckBoxEditor()); 655 } 656 657 665 public void setHeaders(String [] _headers) { 666 tableModel.setHeaders(_headers); 667 } 668 669 679 public void setUneditableColumns(int[] _columnNumbers) { 680 tableModel.setUneditableColumns(_columnNumbers); 681 } 682 683 693 public void setUneditableColumns(String [] _columnNames) throws SQLException { 694 int[] columnNumbers = null; 695 if (_columnNames != null) { 696 columnNumbers = new int[_columnNames.length]; 697 698 for (int i=0;i<_columnNames.length;i++) { 699 columnNumbers[i] = sSRowSet.getColumnIndex(_columnNames[i]) -1; 700 } 701 } 702 703 tableModel.setUneditableColumns(columnNumbers); 704 } 705 706 721 public void setHiddenColumns(int[] _columnNumbers) { 722 hiddenColumns = _columnNumbers; 723 tableModel.setHiddenColumns(_columnNumbers); 724 hideColumns(); 725 } 726 727 742 public void setHiddenColumns(String [] _columnNames) throws SQLException { 743 hiddenColumns = null; 744 tableModel.setHiddenColumns(hiddenColumns); 745 if (_columnNames != null) { 746 hiddenColumns = new int[_columnNames.length]; 747 for(int i=0; i<_columnNames.length; i++) { 748 hiddenColumns[i] = sSRowSet.getColumnIndex(_columnNames[i]) -1; 749 } 750 } 751 hideColumns(); 752 } 753 754 762 public void setSSCellEditing(SSCellEditing _cellEditing) { 763 tableModel.setSSCellEditing( _cellEditing ); 764 } 765 766 769 class DefaultEditor extends DefaultCellEditor{ 770 773 Object value; 774 775 778 java.lang.reflect.Constructor constructor; 779 780 781 784 public DefaultEditor() { 785 super(new SSTextField()); 786 MyListener listener = new MyListener(); 787 getComponent().addFocusListener(listener); 788 getComponent().addKeyListener(listener); 789 } 790 791 794 private class MyListener implements KeyListener, FocusListener{ 795 796 int keyPressed = 0; 797 boolean hasFocus = false; 798 799 805 public void keyPressed(KeyEvent ke){ 806 if(ke.getKeyCode() != KeyEvent.VK_TAB) 807 keyPressed++; 808 } 809 810 813 public void keyReleased(KeyEvent ke){ 814 JComponent editor = (JComponent)DefaultEditor.this.getComponent(); 815 if(editor instanceof JTextField){ 816 if(keyPressed == 0 && Character.isLetterOrDigit(ke.getKeyChar())){ 817 ((JTextField)editor).setText(String.valueOf(ke.getKeyChar())); 818 } 819 } 820 keyPressed--; 821 if(keyPressed < 0) 822 keyPressed = 0; 823 824 } 825 826 public void keyTyped(KeyEvent ke){ 827 } 828 829 832 public void focusGained(FocusEvent fe){ 833 ((SSTextField)getComponent()).selectAll(); 834 hasFocus = true; 835 } 836 837 840 public void focusLost(FocusEvent fe){ 841 hasFocus = false; 843 keyPressed = 0; 844 } 845 } 846 847 public boolean stopCellEditing() { 848 String s = (String )super.getCellEditorValue(); 849 850 if (s.trim().equals("")){ 851 if (constructor.getDeclaringClass() == String .class) { 852 value = s; 853 } 854 super.stopCellEditing(); 855 } 856 857 try { 858 value = constructor.newInstance(new Object []{s}); 859 }catch (Exception e) { 860 ((JComponent)getComponent()).setBorder(new LineBorder (Color.red)); 863 return false; 864 } 865 866 return super.stopCellEditing(); 867 } 868 869 public Component getTableCellEditorComponent(JTable table, Object value, 870 boolean isSelected, int row, int column) { 871 this.value = null; 873 874 ((JComponent)getComponent()).setBorder(new LineBorder (Color.black)); 875 876 try { 879 Class type = table.getColumnClass(column); 880 if (type == Object .class) { 881 type = String .class; 882 } 883 constructor = type.getConstructor(new Class []{String .class}); 884 }catch (Exception e) { 885 return null; 886 } 887 888 return super.getTableCellEditorComponent(table, value, isSelected, row, column); 889 } 890 891 894 public Object getCellEditorValue() { 895 return value; 896 } 897 898 } 899 900 901 904 protected void init() { 905 906 setSurrendersFocusOnKeystroke(true); 908 setDefaultEditor(Number .class, new DefaultEditor()); 909 setDefaultEditor(String .class, new DefaultEditor()); 910 setDefaultEditor(Object .class, new DefaultEditor()); 911 912 this.addKeyListener(new KeyAdapter() { 917 private boolean controlPressed = false; 918 919 public void keyPressed(KeyEvent ke) { 921 if (ke.getKeyCode() == KeyEvent.VK_CONTROL) { 922 controlPressed = true; 923 } 924 } 925 926 public void keyReleased(KeyEvent ke) { 928 if (ke.getKeyCode() == KeyEvent.VK_CONTROL) { 930 controlPressed = false; 931 } 932 if (ke.getKeyCode() == KeyEvent.VK_X) { 935 if (! controlPressed) { 936
|