1 package org.wcb.gui.forms;
2
3 import org.wcb.gui.table.model.AirportModel;
4 import org.wcb.gui.renderer.EditButtonTableCellEditor;
5 import org.wcb.gui.renderer.ColorRowsTableCellRender;
6 import org.wcb.gui.renderer.SelectButtonTableCellEditor;
7 import org.wcb.gui.renderer.DeleteButtonTableCellEditor;
8 import org.wcb.gui.dialog.AirportEntryDialog;
9 import org.wcb.gui.dialog.AirportTableDisplayDialog;
10 import org.wcb.gui.component.WaveButton;
11 import org.wcb.gui.component.JXTitlePanel;
12 import org.wcb.gui.component.border.SearchFieldBorder;
13 import org.wcb.model.vo.hibernate.AirportBO;
14 import org.wcb.resources.MessageResourceRegister;
15 import org.wcb.resources.MessageKey;
16 import org.jdesktop.swingx.border.DropShadowBorder;
17
18 import javax.swing.*;
19 import javax.swing.border.Border;
20 import javax.swing.border.CompoundBorder;
21 import java.awt.*;
22 import java.awt.event.ActionEvent;
23 import java.awt.event.ActionListener;
24 import java.awt.event.KeyListener;
25 import java.awt.event.KeyEvent;
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 public class AirportTableDisplayForm extends JXTitlePanel implements ActionListener, KeyListener {
55
56 private JButton jButtonAddAirport;
57 private JTextField searchField;
58 private JTable jTableAirport;
59 private AirportModel tableModel;
60 private AirportBO oSelectAirport;
61 private AirportTableDisplayDialog parentDialog;
62
63 public AirportTableDisplayForm(JDialog parent, boolean showSelect) {
64 super("Airport View", new Color(0x522aec));
65 Border shadow = new DropShadowBorder(Color.BLACK, 1, 5, .3f, 15, true, true, true, true);
66 setBorder(new CompoundBorder(shadow, getBorder()));
67 if (parent instanceof AirportTableDisplayDialog)
68 {
69 parentDialog = (AirportTableDisplayDialog) parent;
70 }
71 if (showSelect) {
72 tableModel = new AirportModel();
73 jTableAirport = new JTable(tableModel);
74 new SelectButtonTableCellEditor(jTableAirport, 0, this);
75 new EditButtonTableCellEditor(jTableAirport, 5);
76 new DeleteButtonTableCellEditor(jTableAirport, 6);
77 } else {
78 tableModel = new AirportModel(new String[] {"ICAO", "FAA", "Name", "Location", "", ""});
79 jTableAirport = new JTable(tableModel);
80 new EditButtonTableCellEditor(jTableAirport, 4);
81 new DeleteButtonTableCellEditor(jTableAirport, 5);
82 }
83
84 this.initComponents();
85 }
86
87
88 public void refresh(){
89 if (tableModel != null) {
90 tableModel.refreshModel();
91 }
92 }
93
94 private void initComponents() {
95 this.setBackground(new Color(224, 224, 224));
96 jButtonAddAirport = new WaveButton(MessageResourceRegister.getInstance().getValue(MessageKey.BUTTON_ADD_AIRPORT));
97 searchField = new JTextField(20);
98 searchField.addKeyListener(this);
99 searchField.setBorder(new SearchFieldBorder());
100 tableModel.refreshModel();
101 jTableAirport.setDefaultRenderer(String.class, new ColorRowsTableCellRender());
102
103 jTableAirport.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
104
105 setLayout(new BorderLayout());
106
107 JScrollPane jScrollPane1 = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
108 jScrollPane1.setBorder(BorderFactory.createTitledBorder("Airports"));
109 jScrollPane1.setViewportView(jTableAirport);
110
111 JPanel jPanelSouth = new JPanel();
112 GridBagConstraints gridBagConstraints;
113 jPanelSouth.setLayout(new GridBagLayout());
114 gridBagConstraints = new GridBagConstraints();
115 gridBagConstraints.anchor = GridBagConstraints.EAST;
116 jPanelSouth.add(jButtonAddAirport, gridBagConstraints);
117
118 JPanel jSearchPanel = new JPanel();
119 jSearchPanel.add(new JLabel(MessageResourceRegister.getInstance().getValue(MessageKey.LABEL_SEARCH)));
120 jSearchPanel.add(searchField);
121
122 add(jSearchPanel, BorderLayout.NORTH);
123 add(jScrollPane1, java.awt.BorderLayout.CENTER);
124 add(jPanelSouth, BorderLayout.SOUTH);
125 initListeners();
126 }
127
128 private void initListeners() {
129 jButtonAddAirport.addActionListener(this);
130 }
131
132
133
134
135
136 public AirportBO getSelectedRow() {
137 if (oSelectAirport == null)
138 {
139 return tableModel.getItemAt(jTableAirport.getSelectedRow());
140 }
141 return oSelectAirport;
142 }
143
144 public void setSelectedRow(AirportBO value) {
145 oSelectAirport = value;
146 if (parentDialog != null)
147 {
148 parentDialog.fireAirportSelected();
149 }
150 }
151
152 public void actionPerformed(ActionEvent evt) {
153 Object src = evt.getSource();
154 if (src.equals(jButtonAddAirport))
155 {
156 AirportEntryDialog addAirport = new AirportEntryDialog(this);
157 addAirport.setVisible(true);
158 }
159 }
160
161 private void search() {
162 String searchString = searchField.getText().toUpperCase();
163 if (searchString.length() > 0) {
164
165 if(!searchString.startsWith("K")) {
166 searchString = "K" + searchString;
167 }
168 for (int icount = 0; icount < tableModel.getRowCount(); icount++ ) {
169 AirportBO airport = tableModel.getItemAt(icount);
170 if(airport.getIcao().startsWith(searchString)) {
171 this.centerSelectionOnTable(icount);
172 break;
173 } else if (airport.getName().toUpperCase().startsWith(searchField.getText().toUpperCase())) {
174 this.centerSelectionOnTable(icount);
175 break;
176 }
177 }
178 }
179 }
180
181 private void centerSelectionOnTable(int icount) {
182 jTableAirport.setRowSelectionInterval(icount, icount);
183 Rectangle visibleRect = jTableAirport.getVisibleRect();
184 int centerY = visibleRect.y + visibleRect.height/2;
185 Rectangle cellRectangle = jTableAirport.getCellRect(icount, 0, true);
186 if (centerY < cellRectangle.y) {
187
188 cellRectangle.y = cellRectangle.y - visibleRect.y + centerY;
189 } else {
190
191 cellRectangle.y = cellRectangle.y + visibleRect.y - centerY;
192 }
193 jTableAirport.scrollRectToVisible(cellRectangle);
194 }
195
196 public void keyTyped(KeyEvent kvt) {
197 this.search();
198 }
199
200 public void keyPressed(KeyEvent evt) {
201
202 }
203
204 public void keyReleased(KeyEvent evt) {
205
206 }
207 }