1   package org.wcb.gui.renderer;
2   
3   import org.wcb.gui.forms.AircraftTableDisplayForm;
4   import org.wcb.gui.forms.AirportTableDisplayForm;
5   import org.wcb.gui.forms.AircraftTypeTableDisplayForm;
6   import org.wcb.resources.MessageResourceRegister;
7   import org.wcb.resources.MessageKey;
8   import org.wcb.model.vo.hibernate.AircraftBO;
9   import org.wcb.model.vo.hibernate.AirportBO;
10  import org.wcb.model.vo.hibernate.AircraftTypeBO;
11  
12  import javax.swing.*;
13  import javax.swing.table.TableCellRenderer;
14  import javax.swing.table.TableCellEditor;
15  import javax.swing.table.TableColumnModel;
16  import java.awt.event.ActionListener;
17  import java.awt.event.ActionEvent;
18  import java.awt.*;
19  
20  /**
21   * <small>
22   * Copyright (c)  2006  wbogaardt.
23   * This library is free software; you can redistribute it and/or
24   * modify it under the terms of the GNU Lesser General Public
25   * License as published by the Free Software Foundation; either
26   * version 2.1 of the License, or (at your option) any later version.
27   *
28   * This library is distributed in the hope that it will be useful,
29   * but WITHOUT ANY WARRANTY; without even the implied warranty of
30   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
31   * Lesser General Public License for more details.
32   *
33   * You should have received a copy of the GNU Lesser General Public
34   * License along with this library; if not, write to the Free Software
35   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
36   * <p/>
37   * $File:  $ <br>
38   * $Change:  $ submitted by $Author: wbogaardt $ at $DateTime: Mar 30, 2006 11:05:32 AM $ <br>
39   * </small>
40   *
41   * @author wbogaardt
42   * @version 1
43   *          Date: Mar 30, 2006
44   *          Time: 11:05:32 AM
45   */
46  
47  public class SelectButtonTableCellEditor extends AbstractCellEditor
48          implements TableCellRenderer, TableCellEditor, ActionListener
49  {
50      private JButton renderButton;
51      private JButton editButton;
52      private Object oLineObject;
53      private JComponent parentComponent;
54  
55      public SelectButtonTableCellEditor(JTable table, int column, JComponent parent)
56      {
57          super();
58          renderButton = new JButton(MessageResourceRegister.getInstance().getValue(MessageKey.BUTTON_SELECT));
59  
60          editButton = new JButton(MessageResourceRegister.getInstance().getValue(MessageKey.BUTTON_SELECT));
61          editButton.setFocusPainted( false );
62          editButton.addActionListener( this );
63  
64          TableColumnModel columnModel = table.getColumnModel();
65          columnModel.getColumn(column).setCellRenderer( this );
66          columnModel.getColumn(column).setCellEditor( this );
67          parentComponent = parent;
68      }
69  
70      public Component getTableCellRendererComponent(
71              JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
72      {
73          if (hasFocus)
74          {
75              renderButton.setForeground(table.getForeground());
76              renderButton.setBackground(UIManager.getColor("Button.background"));
77          }
78          else if (isSelected)
79          {
80              renderButton.setForeground(table.getSelectionForeground());
81              renderButton.setBackground(table.getSelectionBackground());
82          }
83          else
84          {
85              renderButton.setForeground(table.getForeground());
86              renderButton.setBackground(UIManager.getColor("Button.background"));
87          }
88          oLineObject = value;
89          return renderButton;
90      }
91  
92      public Component getTableCellEditorComponent(
93              JTable table, Object value, boolean isSelected, int row, int column)
94      {
95          oLineObject = value;
96          return editButton;
97      }
98  
99      public Object getCellEditorValue()
100     {
101         return oLineObject;
102     }
103 
104     public void actionPerformed(ActionEvent e)
105     {
106         if(parentComponent instanceof AircraftTableDisplayForm){
107             ((AircraftTableDisplayForm)parentComponent).setSelectedRow((AircraftBO) oLineObject);
108         }
109         if(parentComponent instanceof AirportTableDisplayForm){
110             ((AirportTableDisplayForm)parentComponent).setSelectedRow((AirportBO) oLineObject);
111         }
112         if(parentComponent instanceof AircraftTypeTableDisplayForm) {
113             ((AircraftTypeTableDisplayForm)parentComponent).setSelectedRow((AircraftTypeBO) oLineObject);
114         }
115     }
116 }