File:  [Repository] / FM2SQL / Attic / TableComponent.java
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Wed Feb 18 13:25:24 2004 UTC (20 years, 4 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
cleaning and change of layout

    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 : 70);
  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) ? "&nbsp" : 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 &umlaute;
  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, "&Uuml;");
 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>