Annotation of FM2SQL/TableComponent.java, revision 1.1
1.1 ! rogo 1: import javax.swing.*;
! 2: import java.awt.event.*;
! 3:
! 4: import java.util.*;
! 5: import java.awt.*;
! 6: import javax.swing.table.*;
! 7: import javax.swing.event.*;
! 8: /**
! 9: Table component
! 10: */
! 11:
! 12: public class TableComponent extends JPanel implements TableModelListener
! 13: {
! 14:
! 15: JScrollPane tableScroller;
! 16: JTable table;
! 17: DefaultTableModel tableModel;
! 18: JPanel content;
! 19: int row, col;
! 20: int realCount = 0;
! 21: String columnNames[] = { "no database","connection" };
! 22: String[][] rowData = { {"","" }
! 23: };
! 24: boolean callState = false;
! 25: Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
! 26: static JLabel label;
! 27: int selIndex = 0;
! 28: Icon trueIcon = null, falseIcon = null, empty = null;
! 29: TableComponent tableComp = this;
! 30: /**
! 31: * Constructs an empty table with default header and dummy data
! 32: */
! 33:
! 34: public TableComponent()
! 35: {
! 36:
! 37: try
! 38: {
! 39: trueIcon = new ImageIcon(getClass().getResource("icons/ok.gif"));
! 40:
! 41: falseIcon = new Icon()
! 42: {
! 43: public int getIconHeight()
! 44: {
! 45: return 23;
! 46: }
! 47: public int getIconWidth()
! 48: {
! 49: return 27;
! 50: }
! 51: public void paintIcon(Component c, Graphics g, int x, int y)
! 52: {
! 53: Graphics2D g2 = (Graphics2D) g;
! 54: g2.setColor(Color.blue);
! 55: g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
! 56: g2.setStroke(new BasicStroke(2.0f));
! 57: int xr = x + 20, yr = y + 15;
! 58: int xl = x + 5, yl = y + 5;
! 59: g2.drawLine(xl, yl, xr, yr);
! 60: g2.drawLine(xl, yr, xr, yl);
! 61:
! 62: }
! 63: };
! 64: empty = new Icon()
! 65: {
! 66: public int getIconHeight()
! 67: {
! 68: return 23;
! 69: }
! 70: public int getIconWidth()
! 71: {
! 72: return 27;
! 73: }
! 74: public void paintIcon(Component c, Graphics g, int x, int y)
! 75: {
! 76:
! 77: }
! 78: };
! 79:
! 80: } catch (Exception e)
! 81: {
! 82: System.out.println("Error while loading ok.gif");
! 83: }
! 84:
! 85: content = this;
! 86: tableModel = new DefaultTableModel(rowData, columnNames)
! 87: {
! 88: boolean firstCall = true;
! 89: public Class getColumnClass(int column)
! 90: {
! 91: if (row > dataVector.size())
! 92: row = dataVector.size() - 1;
! 93: Vector rowVector = (Vector) dataVector.elementAt(row);
! 94: if (rowVector.isEmpty())
! 95: return Object.class;
! 96: if (rowVector.elementAt(column) == null)
! 97: return Object.class;
! 98: else
! 99: return rowVector.elementAt(column).getClass();
! 100:
! 101: }
! 102: public Object getValueAt(int i, int j)
! 103: {
! 104: if (((Vector) dataVector.elementAt(i)).isEmpty())
! 105: return null;
! 106: else
! 107: return super.getValueAt(i, j);
! 108: }
! 109: public void setDataVector(Vector rows, Vector columnNames)
! 110: {
! 111: // System.out.println(firstCall);
! 112:
! 113: if (firstCall)
! 114: {
! 115: realCount = rows.size();
! 116: //System.out.println(realCount);
! 117: } else
! 118: firstCall = true;
! 119: super.setDataVector(rows, columnNames);
! 120:
! 121: //realCount =(rows==null) ? 0:rows.size();
! 122: }
! 123: };
! 124:
! 125: table = new JTable(tableModel)
! 126: {
! 127: public TableCellRenderer getCellRenderer(int row, int column)
! 128: {
! 129:
! 130: tableComp.row = row;
! 131: TableCellRenderer renderer = null;
! 132: if (renderer == null)
! 133: {
! 134: renderer = getDefaultRenderer(getColumnClass(column));
! 135: }
! 136: return renderer;
! 137: }
! 138: public TableCellEditor getCellEditor(int row, int column)
! 139: {
! 140: tableComp.row = row;
! 141:
! 142: TableCellEditor editor = null;
! 143:
! 144: if (editor == null)
! 145: {
! 146: editor = getDefaultEditor(getColumnClass(column));
! 147: }
! 148: return editor;
! 149: }
! 150: public boolean isCellEditable(int row,int column)
! 151: {
! 152: tableComp.row=row;
! 153: boolean value=false;
! 154: if(getColumnClass(column)==ArrayList.class||getColumnClass(column)==JComboBox.class||getColumnClass(column)== SQLCommand.class)
! 155: value=true;
! 156: //System.out.println("tried to edit at row "+row+" column "+column+" "+value);
! 157:
! 158: return value;
! 159: }
! 160:
! 161: /* public boolean editCellAt(int row, int column, EventObject e){
! 162: System.out.println(getCellEditor());
! 163: if(isEditing()) editingStopped(null);
! 164: return super.editCellAt(row,col,e);
! 165: }*/
! 166: };
! 167:
! 168: table.getColumnModel().getColumn(0).setPreferredWidth(200);
! 169: table.getColumnModel().getColumn(1).setPreferredWidth(50);
! 170: row = tableModel.getRowCount();
! 171: col = tableModel.getColumnCount();
! 172: ((DefaultTableModel) table.getModel()).setRowCount(10);
! 173:
! 174: tableScroller = new JScrollPane(table);
! 175: Dimension d = table.getPreferredSize();
! 176: tableScroller.setPreferredSize(new Dimension(d.width, d.height + 9));
! 177:
! 178: content.add(tableScroller);
! 179: ((DefaultTableModel) table.getModel()).setRowCount(74);
! 180:
! 181: tableModel.addTableModelListener(this);
! 182: setLayout(new FlowLayout(FlowLayout.LEFT));
! 183: //this.add(content);
! 184:
! 185: table.setDefaultEditor(JComboBox.class, new VectorEditor());
! 186: table.setDefaultRenderer(JComboBox.class, new VectorCellRenderer());
! 187:
! 188: table.setDefaultEditor(ArrayList.class, new ArrayListEditor());
! 189: table.setDefaultRenderer(ArrayList.class, new ArrayListCellRenderer());
! 190: /* table.setDefaultEditor(SQLCommand.class,new DefaultCellEditor(new JTextField()) {
! 191: public Object getCellEditorValue()
! 192: {
! 193: return new SQLCommand(super.getCellEditorValue().toString());
! 194: }
! 195: });*/
! 196: table.setDefaultEditor(SQLCommand.class, new SQLCommandEditor());
! 197:
! 198: table.setDefaultRenderer(Boolean.class, new TableCellRenderer()
! 199: {
! 200: JCheckBox checkBox = new JCheckBox();
! 201: JLabel label = new JLabel();
! 202: public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
! 203: {
! 204: if (value instanceof Integer)
! 205: {
! 206: label.setText(value.toString());
! 207: label.setHorizontalAlignment(JLabel.RIGHT);
! 208:
! 209: return label;
! 210: } else if (value instanceof String)
! 211: {
! 212: label.setText(value.toString());
! 213: label.setHorizontalAlignment(JLabel.CENTER);
! 214: return label;
! 215: }
! 216: checkBox.setHorizontalAlignment(JLabel.CENTER);
! 217: checkBox.setVerticalAlignment(JLabel.CENTER);
! 218:
! 219: checkBox.setSelectedIcon(trueIcon);
! 220: if (value == null)
! 221: checkBox.setIcon(empty);
! 222: else
! 223: checkBox.setIcon(falseIcon);
! 224: checkBox.setForeground(table.getForeground());
! 225: checkBox.setBackground(table.getBackground());
! 226:
! 227: checkBox.setSelected((value != null && ((Boolean) value).booleanValue()));
! 228: return checkBox;
! 229:
! 230: }
! 231:
! 232: });
! 233:
! 234: table.setRowHeight(20);
! 235:
! 236: }
! 237:
! 238: /**
! 239: * Fills the table with the array of Objects
! 240: *@param array of Objects
! 241: *
! 242: */
! 243:
! 244: public void setData(Object[][] data)
! 245: {
! 246: callState = true;
! 247: clear();
! 248: for (int i = 0; i < tableModel.getColumnCount(); ++i)
! 249: {
! 250: for (int j = 0; j < data[0].length; ++j)
! 251: {
! 252: tableModel.setValueAt(data[i][j], j, i);
! 253: }
! 254: }
! 255: callState = false;
! 256: //tableModel.setDataVector(data,columnNames);
! 257: //tableModel.setRowCount(100);
! 258:
! 259: } // to method
! 260: public void clear()
! 261: {
! 262: callState = true;
! 263: for (int i = 0; i < tableModel.getColumnCount(); ++i)
! 264: {
! 265: for (int j = 0; j < tableModel.getRowCount(); ++j)
! 266: {
! 267: tableModel.setValueAt("", j, i);
! 268: }
! 269: }
! 270: //tableModel.setDataVector(rowData,columnNames);
! 271: //tableModel.setRowCount(100);
! 272: }
! 273: public void disable(boolean state)
! 274: {
! 275: if (state)
! 276: {
! 277: table.setEnabled(state);
! 278: } else
! 279: {
! 280: clear();
! 281: table.setEnabled(state);
! 282:
! 283: }
! 284:
! 285: }
! 286:
! 287: public void setEnabled(boolean state)
! 288: {
! 289: table.setEnabled(state);
! 290: }
! 291:
! 292: public void tableChanged(TableModelEvent e)
! 293: {
! 294: }
! 295: public int getMaxHeaderWidth()
! 296: {
! 297: TableColumnModel model = table.getColumnModel();
! 298: int maxWidth = -10000000;
! 299: for (int i = 0; i < model.getColumnCount(); ++i)
! 300: {
! 301: label = new JLabel(model.getColumn(i).getHeaderValue().toString());
! 302: int width = label.getPreferredSize().width + 20;
! 303: if (width > maxWidth)
! 304: maxWidth = width;
! 305: }
! 306: return maxWidth;
! 307: }
! 308: public void enlarge(int windowWidth, int windowHeight)
! 309: {
! 310:
! 311: // Class tre=table.getColumnModel().getColumn(1).getHeaderValue().getClass();
! 312: //Graphics2D g2=((Graphics2D)getGraphics());
! 313: table.setAutoResizeMode(table.AUTO_RESIZE_OFF);
! 314:
! 315: TableColumnModel model = table.getColumnModel();
! 316: for (int i = 0; i < model.getColumnCount(); ++i)
! 317: {
! 318: label = new JLabel(model.getColumn(i).getHeaderValue().toString());
! 319: model.getColumn(i).setPreferredWidth(label.getPreferredSize().width + 50);
! 320:
! 321: }
! 322: Dimension d = table.getPreferredSize();
! 323: Dimension d2 = tableScroller.getPreferredSize();
! 324: tableScroller.setPreferredSize(new Dimension((d.width >= screenSize.width) ? (screenSize.width - 50) : (d.width), d2.height));
! 325: // tableModel.setRowCount(80);
! 326: if (d.width < windowWidth)
! 327: model.getColumn(model.getColumnCount() - 1).setPreferredWidth((windowWidth - d.width) + model.getColumn(model.getColumnCount() - 1).getPreferredWidth());
! 328:
! 329: table.setGridColor(Color.red);
! 330: d2 = tableScroller.getPreferredSize();
! 331: table.validate();
! 332: content.setPreferredSize(new Dimension(d2.width, d2.height + 10));
! 333: content.validate();
! 334: }
! 335: public void sizeToFit(int windowWidth, int windowHeight)
! 336: {
! 337: table.setAutoResizeMode(table.AUTO_RESIZE_LAST_COLUMN);
! 338:
! 339: TableColumnModel model = table.getColumnModel();
! 340: Dimension d2 = getPreferredSize();
! 341:
! 342: int columnWidth = (windowWidth) / model.getColumnCount();
! 343: for (int i = 0; i < model.getColumnCount(); ++i)
! 344: {
! 345: model.getColumn(i).setPreferredWidth(columnWidth);
! 346: //model.getColumn (i).setWidth(columnWidth);
! 347: }
! 348: // System.out.println(table.getPreferredSize()+" "+model.getTotalColumnWidth()+" "+columnWidth);
! 349: /* Dimension d = table.getPreferredSize();
! 350: d2=getPreferredSize();
! 351:
! 352:
! 353: System.out.println("window width"+windowWidth+" width "+d2.width+" "+model.getTotalColumnWidth());
! 354: // d2=getPreferredSize();
! 355: tableScroller.setPreferredSize(new Dimension( windowWidth, d.height));
! 356:
! 357:
! 358: // System.out.println("window width"+windowWidth+" "+windowHeight+" "+getWidth()+" "+getHeight());
! 359:
! 360: table.setAutoResizeMode(table.AUTO_RESIZE_OFF);
! 361: */
! 362: Dimension d = table.getPreferredSize();
! 363: if (columnWidth < getMaxHeaderWidth() || d.width > screenSize.width)
! 364: enlarge(windowWidth, windowHeight);
! 365: table.validate();
! 366: table.setGridColor(Color.red);
! 367:
! 368: }
! 369: class VectorEditor implements TableCellEditor,ActionListener
! 370: {
! 371: JComboBox box = new JComboBox();
! 372: DefaultComboBoxModel model = new DefaultComboBoxModel();
! 373: JComboBox boxValue;
! 374: CellEditorListener listener=table;
! 375: int row,column;
! 376: public VectorEditor()
! 377: {
! 378: // super(new JCheckBox());
! 379:
! 380: box.addActionListener(this);
! 381: /* box.addFocusListener(new FocusAdapter() {
! 382: public void focusLost(FocusEvent e)
! 383: {
! 384: VectorEditor.this.listener.editingStopped(new ChangeEvent(VectorEditor.this));
! 385: System.out.println("lost focus");
! 386: }
! 387: });*/
! 388: }
! 389: public Object getCellEditorValue()
! 390: {
! 391: //selIndex = box.getSelectedIndex();
! 392: System.out.println("Called "+selIndex);
! 393: //tableModel.fireTableCellUpdated(row,column);
! 394: if(box.getModel().getSize()>0)
! 395: return boxValue;
! 396: else return null;
! 397:
! 398: }
! 399:
! 400: public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
! 401: {
! 402: boxValue = (value != null) ? (JComboBox) value : null;
! 403: this.row=row;this.column=column;
! 404: if(boxValue!=null) box.setModel(boxValue.getModel());
! 405: else return null;
! 406: return box;
! 407: }
! 408:
! 409: public boolean isCellEditable(EventObject anEvent)
! 410: {
! 411: if(table.isEditing())
! 412: {
! 413:
! 414: // System.out.println(getCellEditorValue());
! 415: if(listener!=null)
! 416: listener.editingStopped(new ChangeEvent(this));
! 417:
! 418: // listener = null;
! 419: // Object local =getCellEditorValue();
! 420: //table.getModel().setValueAt(local, table.getEditingRow(), table.getEditingColumn());
! 421: // table.remove(label);
! 422: // table.validate();
! 423: //System.out.println("before "+table.getComponentCount());
! 424: // if(table.getEditor)
! 425: // table.editCellAt(row,column);
! 426: // table.removeAll();
! 427: //return null;
! 428: }
! 429:
! 430: //System.out.println(anEvent);
! 431: return true;
! 432: }
! 433:
! 434: public boolean shouldSelectCell(EventObject anEvent)
! 435: {
! 436: //System.out.println(anEvent);
! 437: return true;
! 438: }
! 439:
! 440: public boolean stopCellEditing()
! 441: {
! 442: return true;
! 443: }
! 444:
! 445: public void cancelCellEditing()
! 446: {
! 447: listener.editingStopped(new ChangeEvent(this));
! 448: }
! 449:
! 450: public void addCellEditorListener(CellEditorListener l)
! 451: {
! 452: listener=l;
! 453: //System.out.println(l);
! 454: }
! 455:
! 456: public void removeCellEditorListener(CellEditorListener l)
! 457: {
! 458: //System.out.println("removed listener");
! 459:
! 460: }
! 461: /* (non-Javadoc)
! 462: * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
! 463: */
! 464: public void actionPerformed(ActionEvent e)
! 465: {
! 466: // System.out.println(e.getActionCommand());
! 467: if (table.isEditing())
! 468: if(listener!=null)
! 469: listener.editingStopped(new ChangeEvent(this));
! 470: }
! 471:
! 472: }
! 473: class SQLCommandEditor implements TableCellEditor
! 474: {
! 475: JTextArea editor = new JTextArea();
! 476: JScrollPane pane =new JScrollPane(editor);
! 477: JDialog window ;
! 478: CellEditorListener listener=table;
! 479: JLabel label = new JLabel();
! 480: int x=0,y=0;
! 481: String copy="";boolean removeCalled=true;
! 482: public SQLCommandEditor()
! 483: {
! 484: // super(new JCheckBox());
! 485: //this.list = list;
! 486: editor.getDocument().addDocumentListener(new DocumentListener() {
! 487:
! 488: public void insertUpdate(DocumentEvent e)
! 489: {
! 490: //System.out.println(editor.getText().charAt( e.getOffset()));
! 491: copy=editor.getText();
! 492: if(copy.charAt(e.getOffset())=='\n')
! 493: {
! 494: window.setSize(window.getWidth(),window.getHeight()+20);
! 495: window.validate();
! 496: }
! 497: }
! 498:
! 499: public void removeUpdate(DocumentEvent e)
! 500: {
! 501: if(copy.charAt(e.getOffset())=='\n')
! 502: {
! 503: window.setSize(window.getWidth(),window.getHeight()-20);
! 504: window.validate();
! 505: copy = editor.getText();
! 506: }
! 507:
! 508: }
! 509:
! 510: public void changedUpdate(DocumentEvent e)
! 511: {
! 512: }
! 513:
! 514: });
! 515: table.addMouseListener(new MouseAdapter() {
! 516: public void mouseEntered(MouseEvent e)
! 517: {
! 518: if(true) return;
! 519: //System.out.println(e);
! 520: x = e.getX();
! 521: y = e.getY();
! 522:
! 523: int row = table.rowAtPoint(new Point(e.getX(),e.getY()));
! 524: int col = table.columnAtPoint(new Point(e.getX(),e.getY()));
! 525:
! 526: if(window!=null)
! 527: {
! 528: if(!window.isVisible()) return;
! 529:
! 530: }else return;
! 531: if(row!=table.getEditingRow()||col!=table.getEditingColumn())
! 532: if (listener != null)
! 533: {
! 534: listener.editingStopped(new ChangeEvent(this));
! 535: listener = null;
! 536: }
! 537: }
! 538: public void mousePressed(MouseEvent e)
! 539: {
! 540:
! 541: // System.out.println(e);
! 542: x = e.getX();
! 543: y = e.getY();
! 544:
! 545: if(window!=null)
! 546: if(!window.isVisible()) return;
! 547:
! 548: int row = table.rowAtPoint(new Point(x,y));
! 549: int col = table.columnAtPoint(new Point(x,y));
! 550:
! 551: if(row!=table.getEditingRow()||col!=table.getEditingColumn())
! 552: if (listener != null)
! 553: {
! 554: listener.editingStopped(new ChangeEvent(this));
! 555: listener = null;
! 556: }
! 557: }
! 558:
! 559: public void mouseExited(MouseEvent e) {
! 560: // System.out.println(e);
! 561:
! 562: }
! 563: });
! 564: }
! 565: public Object getCellEditorValue()
! 566: {
! 567: window.setVisible(false);
! 568: window.dispose();
! 569: //table.repaint();
! 570: return new SQLCommand(editor.getText());
! 571: }
! 572:
! 573: public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
! 574: {
! 575: // checks if editor was finished if not remove old editor
! 576: //this.row=row;
! 577: SQLCommand command = (value != null) ? (SQLCommand) value : null;
! 578: editor.setText(command.toString());
! 579: System.out.println("editor size "+editor.getPreferredSize());
! 580: pane.setBorder(new javax.swing.border.LineBorder(Color.red));
! 581:
! 582: if(window == null)
! 583: {
! 584: window= new JDialog(FM2SQL.fmInstance);
! 585: window.getContentPane().add(pane);
! 586: window.addWindowListener( new WindowAdapter()
! 587: {
! 588: public void windowClosing(WindowEvent e)
! 589: {
! 590: if (listener != null)
! 591: {
! 592: listener.editingStopped(new ChangeEvent(this));
! 593: listener = null;
! 594: }
! 595:
! 596: }
! 597: });
! 598: }
! 599: Point p=table.getLocationOnScreen();
! 600: // if(label.isShowing())
! 601: // System.out.println( label.getLocationOnScreen());
! 602:
! 603:
! 604: Dimension dimEditor = editor.getPreferredSize();
! 605: if (dimEditor.width < 260)
! 606: dimEditor.width = 260;
! 607: window.setSize((dimEditor.width < 280) ? dimEditor.width + 20 : 280, (dimEditor.height > 50) ? 200 : 60);
! 608: TableColumnModel model = table.getColumnModel();
! 609: int offset_x = 0, offset_y = 0;
! 610: for (int i = 0; i <= column; ++i)
! 611: {
! 612: if (i == column)
! 613: offset_x -= (window.getWidth() - model.getColumn(i).getWidth()) / 2;
! 614: else
! 615: offset_x += model.getColumn(i).getWidth();
! 616:
! 617: }
! 618: for (int i = 0; i < row; ++i)
! 619: {
! 620: offset_y += table.getRowHeight(row);
! 621: }
! 622: // System.out.println(table.getCellRect(row, column, false));
! 623: window.setTitle("Editing row "+row+" column "+column);
! 624: window.setLocation(p.x+offset_x,p.y+offset_y);
! 625: window.setVisible(true);
! 626: System.out.println("row "+row+" col "+column+" location"+ window.getLocation());
! 627: // window.setVisible(true);
! 628:
! 629: //label=new JLabel(command.toString());
! 630: label.setText(command.toString());
! 631: label.setForeground(Color.red);
! 632: return label;
! 633: }
! 634:
! 635: public boolean isCellEditable(EventObject anEvent)
! 636: {
! 637: if (table.isEditing())
! 638: {
! 639:
! 640: if (listener == null)
! 641: listener = table;
! 642: if (listener != null)
! 643: listener.editingStopped(new ChangeEvent(this));
! 644: }
! 645:
! 646: return true;
! 647: }
! 648:
! 649: public boolean shouldSelectCell(EventObject anEvent)
! 650: {
! 651:
! 652: return true;
! 653: }
! 654:
! 655: public boolean stopCellEditing()
! 656: {
! 657: return true;
! 658: }
! 659:
! 660: public void cancelCellEditing()
! 661: {
! 662: System.out.println("cancel was called");
! 663: }
! 664:
! 665: public void addCellEditorListener(CellEditorListener l)
! 666: {
! 667: removeCalled=false;
! 668: listener=l;
! 669: }
! 670:
! 671: public void removeCellEditorListener(CellEditorListener l)
! 672: {
! 673: //if(listener!=null)
! 674: removeCalled = true;
! 675: //table.removeAll();
! 676:
! 677: System.out.println("remove was called");
! 678: }
! 679:
! 680: }
! 681:
! 682:
! 683: class ArrayListEditor implements TableCellEditor
! 684: {
! 685: JList list = new JList();
! 686: ArrayList vec = new ArrayList();
! 687: DefaultListModel model = new DefaultListModel();
! 688: JScrollPane pane =new JScrollPane(list);
! 689: JWindow window ;
! 690: CellEditorListener listener=table;
! 691: int row,x,y;
! 692: public ArrayListEditor()
! 693: {
! 694: // super(new JCheckBox());
! 695: //this.list = list;
! 696: table.addMouseListener(new MouseAdapter() {
! 697: public void mouseEntered(MouseEvent e)
! 698: {
! 699: // if(true) return;
! 700: //System.out.println(e);
! 701: x = e.getX();
! 702: y = e.getY();
! 703:
! 704: int row = table.rowAtPoint(new Point(e.getX(),e.getY()));
! 705: int col = table.columnAtPoint(new Point(e.getX(),e.getY()));
! 706:
! 707: if(window!=null)
! 708: {
! 709: if(!window.isVisible()) return;
! 710:
! 711: } else return;
! 712:
! 713: if(row!=table.getEditingRow()||col!=table.getEditingColumn())
! 714: if (listener != null)
! 715: {
! 716: listener.editingStopped(new ChangeEvent(this));
! 717: //listener = null;
! 718: }
! 719: }
! 720: public void mousePressed(MouseEvent e)
! 721: {
! 722:
! 723: // System.out.println(e);
! 724: x = e.getX();
! 725: y = e.getY();
! 726:
! 727: if(window!=null)
! 728: if(!window.isVisible()) return;
! 729:
! 730: int row = table.rowAtPoint(new Point(x,y));
! 731: int col = table.columnAtPoint(new Point(x,y));
! 732:
! 733: if(row!=table.getEditingRow()||col!=table.getEditingColumn())
! 734: if (listener != null)
! 735: {
! 736: listener.editingStopped(new ChangeEvent(this));
! 737: //listener = null;
! 738: }
! 739: }
! 740:
! 741: public void mouseExited(MouseEvent e) {
! 742: // System.out.println(e);
! 743:
! 744: }
! 745: });
! 746:
! 747: pane.addFocusListener(new FocusAdapter()
! 748: {
! 749: public void focusLost(FocusEvent e)
! 750: {
! 751: listener.editingStopped(new ChangeEvent(this));
! 752: // table.setRowHeight(row,20);
! 753: System.out.println("lost focus");
! 754: }
! 755:
! 756: });
! 757: pane.addMouseListener(new MouseAdapter()
! 758: {
! 759: public void mouseExited(MouseEvent e)
! 760: {
! 761: // System.out.println(e);
! 762: listener.editingStopped(new ChangeEvent(this));
! 763: }
! 764: });
! 765: }
! 766: public Object getCellEditorValue()
! 767: {
! 768: selIndex = list.getSelectedIndex();
! 769: window.setVisible(false);
! 770: window.dispose();
! 771: // table.setRowHeight(row,20);
! 772:
! 773: return vec;
! 774: }
! 775:
! 776: public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
! 777: {
! 778: this.row=row;
! 779: vec = (value != null) ? (ArrayList) value : new ArrayList();
! 780: model.clear();
! 781: for(int i=0;i<vec.size();++i)
! 782: model.addElement(vec.get(i));
! 783: list.setModel(model);
! 784: list.setModel(model);
! 785: pane.setBorder(new javax.swing.border.LineBorder(Color.red));
! 786: //if(!isSelected)
! 787: //table.setRowHeight(row,80);
! 788: if(window == null)
! 789: {
! 790: window= new JWindow(FM2SQL.fmInstance);
! 791: window.getContentPane().add(pane);
! 792: }
! 793: Point p=table.getLocationOnScreen();
! 794: // if(label.isShowing())
! 795: // System.out.println( label.getLocationOnScreen());
! 796:
! 797:
! 798: Dimension dimEditor = pane.getPreferredSize();
! 799: window.setSize((dimEditor.width<250) ? dimEditor.width+20:250,(dimEditor.height>50) ? 200:50);
! 800: TableColumnModel model = table.getColumnModel();
! 801: int offset_x = 0,offset_y = 0;
! 802: for (int i = 0; i <= column; ++i)
! 803: {
! 804: if(i==column)
! 805: offset_x-=(window.getWidth()-model.getColumn(i).getWidth())/2;
! 806: else
! 807: offset_x+=model.getColumn(i).getWidth();
! 808:
! 809: }
! 810: for (int i = 0; i < row; ++i)
! 811: {
! 812: offset_y +=table.getRowHeight(row);
! 813: }
! 814: window.setVisible(true);
! 815: // System.out.println(table.getCellRect(row, column, false));
! 816:
! 817: window.setLocation(p.x+offset_x,p.y+offset_y);
! 818: // System.out.println("row "+row+" col "+column+" location"+ window.getBounds());
! 819: // window.setVisible(true);
! 820: //label=new JLabel(command.toString());
! 821: label.setText("editing");
! 822: label.setForeground(Color.red);
! 823: return label;
! 824:
! 825: // return pane;
! 826: }
! 827:
! 828: public boolean isCellEditable(EventObject anEvent)
! 829: {
! 830: if (table.isEditing())
! 831: {
! 832: System.out.println("Editing is in progress");
! 833:
! 834: // if (listener == null)
! 835: // listener = table;
! 836: if (listener != null)
! 837: listener.editingStopped(new ChangeEvent(this));
! 838:
! 839: }
! 840: return true;
! 841: }
! 842:
! 843: public boolean shouldSelectCell(EventObject anEvent)
! 844: {
! 845: return true;
! 846: }
! 847:
! 848: public boolean stopCellEditing()
! 849: {
! 850: return true;
! 851: }
! 852:
! 853: public void cancelCellEditing()
! 854: {
! 855: }
! 856:
! 857: public void addCellEditorListener(CellEditorListener l)
! 858: {
! 859: listener=l;
! 860: }
! 861:
! 862: public void removeCellEditorListener(CellEditorListener l)
! 863: {
! 864: System.out.println(l);
! 865: }
! 866:
! 867: }
! 868: class VectorCellRenderer implements TableCellRenderer
! 869: {
! 870: JList list=new JList();
! 871: JComboBox box;
! 872: JLabel label = new JLabel();
! 873: DefaultListModel model=new DefaultListModel();
! 874: JScrollPane listScroller=new JScrollPane(list);
! 875:
! 876: public VectorCellRenderer()
! 877: {
! 878: //list = new JList();
! 879: // vec = new Vector();
! 880: label.setForeground(Color.blue);
! 881: }
! 882:
! 883: public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
! 884: {
! 885: box = (JComboBox) value ;
! 886: if(box==null) return null;//label.setText("");
! 887: else
! 888: if(box.getSelectedItem()!=null)
! 889: {
! 890: String text=box.getSelectedItem().toString();
! 891: if(text=="")
! 892: {
! 893: text="\"no Layout\"";
! 894: label.setForeground(Color.red);
! 895:
! 896: }else label.setForeground(Color.blue);
! 897: label.setText(text);
! 898:
! 899: }
! 900: else label.setText("");
! 901: return label;
! 902: }
! 903:
! 904: }
! 905: class ArrayListCellRenderer implements TableCellRenderer
! 906: {
! 907: JList list=new JList();
! 908: ArrayList vec;
! 909: JLabel label = new JLabel();
! 910: DefaultListModel model=new DefaultListModel();
! 911: JScrollPane listScroller=new JScrollPane(list);
! 912:
! 913: public ArrayListCellRenderer()
! 914: {
! 915: //list = new JList();
! 916: vec = new ArrayList();
! 917: label.setForeground(Color.blue);
! 918: }
! 919:
! 920: public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
! 921: {
! 922: vec = (value != null) ? (ArrayList) value : new ArrayList();
! 923: model.clear();
! 924: for(int i=0;i<vec.size();++i)
! 925: model.addElement(vec.get(i));
! 926: list.setModel(model);
! 927:
! 928: // if (selIndex < vec.size() && selIndex >= 0)
! 929: // list.setSelectedIndex(selIndex);
! 930: /* if (hasFocus) {
! 931: label.setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") );
! 932: if (table.isCellEditable(row, column)) {
! 933: label.setForeground( UIManager.getColor("Table.focusCellForeground") );
! 934: label.setBackground( UIManager.getColor("Table.focusCellBackground") );
! 935: }
! 936: } else {
! 937: label.setBorder(BorderFactory.createEmptyBorder());
! 938: }*/
! 939: /*
! 940: if (vec.size() >0)
! 941: {
! 942: label.setText(vec.get(0).toString());
! 943: return label;
! 944: } else if (vec.isEmpty())
! 945: {
! 946: label.setText("null");
! 947: return label;
! 948:
! 949: } else
! 950: return list;
! 951: }*/
! 952:
! 953: label.setText((vec.isEmpty()) ? "":vec.get(0).toString());
! 954: return label;
! 955: }
! 956: }
! 957:
! 958: /**
! 959: * exports the current data in this tablecomponent to HTML
! 960: *
! 961: * @return StringBuffer containing the HTML code
! 962: */
! 963:
! 964: public StringBuffer exportToHTML()
! 965: {
! 966: StringBuffer buff = new StringBuffer();
! 967: buff.append(" <table border cellspacing=0 width=\"50%\">");
! 968: // table Header
! 969: buff.append("<tr>");
! 970: for (int i = 0; i < tableModel.getColumnCount(); ++i)
! 971: {
! 972: buff.append("<th>");
! 973: buff.append(tableModel.getColumnName(i));
! 974: buff.append("</th>");
! 975: }
! 976: buff.append("</tr>");
! 977: for (int i = 0; i < realCount; ++i)
! 978: {
! 979: for (int j = 0; j < tableModel.getColumnCount(); ++j)
! 980: {
! 981: buff.append("<td>");
! 982: String val = (tableModel.getValueAt(i, j) == null) ? " " : tableModel.getValueAt(i, j).toString();
! 983: buff.append(val);
! 984: buff.append("</td>");
! 985: }
! 986: buff.append("<tr>");
! 987: buff.append("</tr>\n");
! 988: }
! 989: buff.append("</table>");
! 990:
! 991: return convertUml(buff);
! 992: }
! 993: /**
! 994: * MacOs and Windows Version of the Method
! 995: * converts german umlaute to html ¨aute;
! 996: */
! 997: public static StringBuffer convertUml(StringBuffer newName)
! 998: {
! 999: StringBuffer alterMe = newName; //new StringBuffer(newName.trim());
! 1000: int length = alterMe.length();
! 1001: int j = 0;
! 1002: while (j < length)
! 1003: {
! 1004: //if(Character.isSpaceChar(alterMe.charAt(j)))
! 1005: // alterMe.setCharAt(j,'_');
! 1006: if (alterMe.charAt(j) == 'š' || alterMe.charAt(j) == 'ö')
! 1007: {
! 1008: alterMe.setCharAt(j, '&');
! 1009: alterMe.insert(j + 1, "ouml;");
! 1010: length = length + 5;
! 1011: }
! 1012: if (alterMe.charAt(j) == '…' || alterMe.charAt(j) == 'Ö')
! 1013: {
! 1014: alterMe.setCharAt(j, '&');
! 1015: alterMe.insert(j + 1, "Ouml;");
! 1016: length = length + 5;
! 1017:
! 1018: }
! 1019: if (alterMe.charAt(j) == 'Š' || alterMe.charAt(j) == 'ä')
! 1020: {
! 1021: alterMe.setCharAt(j, '&');
! 1022: alterMe.insert(j + 1, "auml;");
! 1023: length = length + 5;
! 1024:
! 1025: }
! 1026: if (alterMe.charAt(j) == '€' || alterMe.charAt(j) == 'Ä')
! 1027: {
! 1028: alterMe.setCharAt(j, '&');
! 1029: alterMe.insert(j + 1, "Auml;");
! 1030: length = length + 5;
! 1031: }
! 1032: if (alterMe.charAt(j) == 'Ÿ' || alterMe.charAt(j) == 'ü')
! 1033: {
! 1034: alterMe.setCharAt(j, '&');
! 1035: alterMe.insert(j + 1, "uuml;");
! 1036: length = length + 5;
! 1037: }
! 1038: if (alterMe.charAt(j) == '†' || alterMe.charAt(j) == 'Ü')
! 1039: {
! 1040: alterMe.setCharAt(j, '&');
! 1041: alterMe.insert(j + 1, "Ü");
! 1042: length = length + 5;
! 1043: }
! 1044: if (alterMe.charAt(j) == '§' || alterMe.charAt(j) == 'ß')
! 1045: {
! 1046: alterMe.setCharAt(j, '&');
! 1047: alterMe.insert(j + 1, "szlig;");
! 1048: length = length + 6;
! 1049: }
! 1050:
! 1051: /*
! 1052: if(Character.isSpaceChar(alterMe.charAt(j))
! 1053: alterMe.setCharAt(j,'_');
! 1054: */
! 1055: ++j;
! 1056: }
! 1057: return alterMe;
! 1058: }
! 1059: public static class SQLCommand
! 1060: {
! 1061: String command = "";
! 1062:
! 1063: public SQLCommand()
! 1064: {
! 1065: }
! 1066: public SQLCommand(String command)
! 1067: {
! 1068: this.command = command;
! 1069: }
! 1070: public String toString()
! 1071: {
! 1072: return command;
! 1073: }
! 1074: }
! 1075:
! 1076: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>