Iteración 3(Versión sin idiomas)
[ISBets21MAUBRY] / eclipse-workspace / ISBets21MAUBRY / src / main / java / gui / CreateBetGUI.java
1 package gui;
2
3 import java.awt.Color;
4 import java.awt.Component;
5 import java.awt.Dimension;
6 import java.awt.Font;
7 import java.awt.Frame;
8 import java.awt.Rectangle;
9 import java.awt.SystemColor;
10 import java.awt.event.ActionEvent;
11 import java.awt.event.ActionListener;
12 import java.awt.event.MouseAdapter;
13 import java.awt.event.MouseEvent;
14 import java.beans.PropertyChangeEvent;
15 import java.beans.PropertyChangeListener;
16 import java.text.DateFormat;
17 import java.util.Calendar;
18 import java.util.Date;
19 import java.util.Locale;
20 import java.util.Vector;
21
22 import javax.swing.JButton;
23 import javax.swing.JFrame;
24 import javax.swing.JLabel;
25 import javax.swing.JOptionPane;
26 import javax.swing.JPanel;
27 import javax.swing.JScrollPane;
28 import javax.swing.JTable;
29 import javax.swing.JTextField;
30 import javax.swing.SwingConstants;
31 import javax.swing.table.DefaultTableCellRenderer;
32 import javax.swing.table.DefaultTableModel;
33
34 import com.toedter.calendar.JCalendar;
35
36 import businessLogic.BLFacade;
37 import configuration.UtilDate;
38 import domain.Forecast;
39 import domain.Question;
40 import domain.RegularUser;
41
42 public class CreateBetGUI extends JFrame {
43         private static final long serialVersionUID = 1L;
44
45 //      private final JLabel jLabelEventDate = new JLabel(ResourceBundle.getBundle("Etiquetas").getString("EventDate"));
46 //      private final JLabel jLabelQueries = new JLabel(ResourceBundle.getBundle("Etiquetas").getString("Queries"));
47 //      private final JLabel jLabelEvents = new JLabel(ResourceBundle.getBundle("Etiquetas").getString("Events"));
48         private final JLabel jLabelEventDate = new JLabel("EventDate");
49         private final JLabel jLabelQueries = new JLabel("Queries");
50         private final JLabel jLabelEvents = new JLabel("Events");
51
52 //      private JButton jButtonClose = new JButton(ResourceBundle.getBundle("Etiquetas").getString("Close"));
53         private JButton jButtonClose = new JButton("Close");
54
55         // Code for JCalendar
56         private JCalendar jCalendar1 = new JCalendar();
57         private Calendar calendarAnt = null;
58         private Calendar calendarAct = null;
59         private JScrollPane scrollPaneEvents = new JScrollPane();
60         private JScrollPane scrollPaneQueries = new JScrollPane();
61         private JScrollPane scrollPaneForecasts = new JScrollPane();
62
63         private Vector<Date> datesWithEventsCurrentMonth = new Vector<Date>();
64
65         private JTable tableEvents = new JTable();
66         private JTable tableQueries = new JTable();
67         private JTable tableForecasts = new JTable();
68
69         private DefaultTableModel tableModelEvents;
70         private DefaultTableModel tableModelQueries;
71         private DefaultTableModel tableModelForecasts;
72
73 //      private String[] columnNamesEvents = new String[] { ResourceBundle.getBundle("Etiquetas").getString("EventN"),
74 //                      ResourceBundle.getBundle("Etiquetas").getString("Event"),
75 //
76 //      };
77 //      private String[] columnNamesQueries = new String[] { ResourceBundle.getBundle("Etiquetas").getString("QueryN"),
78 //                      ResourceBundle.getBundle("Etiquetas").getString("Query")
79 //
80 //      };
81 //
82 //      private String[] columnNamesForecasts = new String[] { ResourceBundle.getBundle("Etiquetas").getString("ForecastN"),
83 //                      ResourceBundle.getBundle("Etiquetas").getString("Forecast"), "Fee"
84 //
85 //      };
86         private String[] columnNamesEvents = new String[] { "EventN", "Event",
87
88         };
89         private String[] columnNamesQueries = new String[] { "QueryN", "Query"
90
91         };
92
93         private String[] columnNamesForecasts = new String[] { "ForecastN", "Forecast", "Fee"
94
95         };
96         private Question que;
97         private Forecast forecast;
98         private static BLFacade facade = LoginGUI.getBusinessLogic();
99         private JTextField textBet;
100
101         private RegularUser userlog = null;
102         private RegularUser newUserActualizado;
103         private Vector<Forecast> forecasts;
104         private Vector<Question> queries;
105         private JLabel lblSaldo;
106
107         // private JButton btnCreateBet = new
108         // JButton(ResourceBundle.getBundle("Etiquetas").getString("MakeBet"));
109         private JButton btnCreateBet = new JButton("Bet");
110
111         public static void setBusinessLogic(BLFacade pfacade) {
112                 facade = pfacade;
113         }
114
115         public static BLFacade getBusinessLogic() {
116                 return facade;
117         }
118
119         public CreateBetGUI(RegularUser u) {
120                 getContentPane().setBackground(Color.WHITE);
121                 userlog = u;
122                 newUserActualizado = u;
123
124                 try {
125                         jbInit();
126                 } catch (Exception e) {
127                         e.printStackTrace();
128                 }
129         }
130
131         private void jbInit() throws Exception {
132
133                 this.getContentPane().setLayout(null);
134                 this.setSize(new Dimension(730, 550));
135
136 //              this.setTitle(ResourceBundle.getBundle("Etiquetas").getString("MakeBet")
137 //                              + "                                                " + userlog.getUserName());
138                 this.setTitle("MakeBet" + "                                                " + userlog.getUserName());
139                 jLabelEventDate.setBounds(new Rectangle(40, 15, 140, 25));
140                 jLabelQueries.setBounds(10, 211, 406, 14);
141                 jLabelEvents.setBounds(295, 19, 259, 16);
142
143                 this.getContentPane().add(jLabelEventDate, null);
144                 this.getContentPane().add(jLabelQueries);
145                 this.getContentPane().add(jLabelEvents);
146                 jButtonClose.setFont(new Font("Dialog", Font.BOLD, 14));
147                 jButtonClose.setForeground(Color.WHITE);
148                 jButtonClose.setBackground(SystemColor.controlShadow);
149
150                 jButtonClose.setBounds(new Rectangle(57, 419, 130, 30));
151
152                 jButtonClose.addActionListener(new ActionListener() {
153                         @Override
154                         public void actionPerformed(ActionEvent e) {
155                                 Frame gui = new MainGUI(newUserActualizado);
156                                 gui.setAlwaysOnTop(true);
157                                 gui.setVisible(true);
158                                 dispose();
159
160                         }
161                 });
162
163                 this.getContentPane().add(jButtonClose, null);
164
165                 jCalendar1.setBounds(new Rectangle(40, 50, 225, 150));
166
167                 datesWithEventsCurrentMonth = facade.getEventsMonth(jCalendar1.getDate());
168                 CreateQuestionGUI.paintDaysWithEvents(jCalendar1, datesWithEventsCurrentMonth);
169
170                 // Code for JCalendar
171                 this.jCalendar1.addPropertyChangeListener(new PropertyChangeListener() {
172                         @Override
173                         public void propertyChange(PropertyChangeEvent propertychangeevent) {
174                                 btnCreateBet.setEnabled(false);
175
176                                 if (propertychangeevent.getPropertyName().equals("locale")) {
177                                         jCalendar1.setLocale((Locale) propertychangeevent.getNewValue());
178                                 } else if (propertychangeevent.getPropertyName().equals("calendar")) {
179                                         calendarAnt = (Calendar) propertychangeevent.getOldValue();
180                                         calendarAct = (Calendar) propertychangeevent.getNewValue();
181                                         DateFormat dateformat1 = DateFormat.getDateInstance(1, jCalendar1.getLocale());
182 //                                      jCalendar1.setCalendar(calendarAct);
183                                         Date firstDay = UtilDate.trim(new Date(jCalendar1.getCalendar().getTime().getTime()));
184
185                                         int monthAnt = calendarAnt.get(Calendar.MONTH);
186                                         int monthAct = calendarAct.get(Calendar.MONTH);
187
188                                         if (monthAct != monthAnt) {
189                                                 if (monthAct == monthAnt + 2) {
190                                                         // Si en JCalendar está 30 de enero y se avanza al mes siguiente, devolvería 2
191                                                         // de marzo (se toma como equivalente a 30 de febrero)
192                                                         // Con este código se dejará como 1 de febrero en el JCalendar
193                                                         calendarAct.set(Calendar.MONTH, monthAnt + 1);
194                                                         calendarAct.set(Calendar.DAY_OF_MONTH, 1);
195                                                 }
196
197                                                 jCalendar1.setCalendar(calendarAct);
198
199                                                 BLFacade facade = LoginGUI.getBusinessLogic();
200
201                                                 datesWithEventsCurrentMonth = facade.getEventsMonth(jCalendar1.getDate());
202                                         }
203
204                                         CreateQuestionGUI.paintDaysWithEvents(jCalendar1, datesWithEventsCurrentMonth);
205
206                                         try {
207                                                 tableModelEvents.setDataVector(null, columnNamesEvents);
208                                                 tableModelEvents.setColumnCount(3); // another column added to allocate ev objects
209
210                                                 // BLFacade facade = LoginGUI.getBusinessLogic();
211
212                                                 Vector<domain.Event> events = facade.getEvents(firstDay);
213
214                                                 if (events.isEmpty())
215 //                                                      jLabelEvents.setText(ResourceBundle.getBundle("Etiquetas").getString("NoEvents") + ": "
216 //                                                                      + dateformat1.format(calendarAct.getTime()));
217                                                         jLabelEvents.setText("NoEvents" + ": " + dateformat1.format(calendarAct.getTime()));
218                                                 else
219 //                                                      jLabelEvents.setText(ResourceBundle.getBundle("Etiquetas").getString("Events") + ": "
220 //                                                                      + dateformat1.format(calendarAct.getTime()));
221                                                         jLabelEvents.setText("Events" + ": " + dateformat1.format(calendarAct.getTime()));
222                                                 for (domain.Event ev : events) {
223                                                         if (!ev.getClosed()) {
224                                                                 Vector<Object> row = new Vector<Object>();
225
226                                                                 System.out.println("Events " + ev);
227
228                                                                 row.add(ev.getEventNumber());
229                                                                 row.add(ev.getDescription());
230                                                                 row.add(ev); // ev object added in order to obtain it with
231                                                                                                 // tableModelEvents.getValueAt(i,2)
232                                                                 tableModelEvents.addRow(row);
233                                                         }
234                                                 }
235                                                 tableEvents.getColumnModel().getColumn(0).setPreferredWidth(25);
236                                                 tableEvents.getColumnModel().getColumn(1).setPreferredWidth(268);
237                                                 tableEvents.getColumnModel().removeColumn(tableEvents.getColumnModel().getColumn(2));
238
239                                                 tableModelQueries.setRowCount(0);
240                                                 tableModelForecasts.setRowCount(0);
241
242                                         } catch (Exception e1) {
243
244                                                 jLabelQueries.setText(e1.getMessage());
245                                         }
246
247                                 }
248                         }
249                 });
250
251                 this.getContentPane().add(jCalendar1, null);
252
253                 scrollPaneEvents.setBounds(new Rectangle(292, 50, 346, 150));
254
255                 scrollPaneQueries.setBounds(new Rectangle(10, 236, 372, 116));
256
257                 scrollPaneForecasts.setBounds(new Rectangle(410, 236, 204, 116));
258
259                 tableEvents.addMouseListener(new MouseAdapter() {
260                         @Override
261                         public void mouseClicked(MouseEvent e) {
262                                 tableModelForecasts.setRowCount(0);
263
264                                 int i = tableEvents.getSelectedRow();
265                                 domain.Event ev = (domain.Event) tableModelEvents.getValueAt(i, 2); // obtain ev object
266                                 queries = ev.getQuestions();
267                                 btnCreateBet.setEnabled(false);
268
269                                 tableModelQueries.setDataVector(null, columnNamesQueries);
270
271                                 if (queries.isEmpty())
272 //                                      jLabelQueries.setText(
273 //                                                      ResourceBundle.getBundle("Etiquetas").getString("NoQueries") + ": " + ev.getDescription());
274                                         jLabelQueries.setText("NoQueries" + ": " + ev.getDescription());
275                                 else
276 //                                      jLabelQueries.setText(ResourceBundle.getBundle("Etiquetas").getString("SelectedEvent") + " "
277 //                                                      + ev.getDescription());
278                                         jLabelQueries.setText("SelectedEvent" + " " + ev.getDescription());
279
280                                 for (domain.Question q : queries) {
281                                         Vector<Object> row = new Vector<Object>();
282                                         row.add(q.getQuestionNumber());
283                                         row.add(q.getQuestion());
284                                         tableModelQueries.addRow(row);
285                                 }
286                                 tableQueries.getColumnModel().getColumn(0).setPreferredWidth(25);
287                                 tableQueries.getColumnModel().getColumn(1).setPreferredWidth(268);
288                         }
289                 });
290                 tableQueries.addMouseListener(new MouseAdapter() {
291
292                         @Override
293                         public void mouseClicked(MouseEvent e) {
294                                 tableModelForecasts.setRowCount(0);
295                                 int i = tableQueries.getSelectedRow();
296                                 que = queries.get(i);
297                                 btnCreateBet.setEnabled(false);
298
299                                 forecasts = que.getForecasts();
300                                 System.out.println("TAMAÑO FORECASTS: " + forecasts.size());
301                                 for (domain.Forecast f : forecasts) {
302                                         Vector<Object> row = new Vector<Object>();
303                                         row.add(f.getForecastNumber());
304                                         row.add(f.getForecast());
305                                         row.add(f.getFee());
306                                         tableModelForecasts.addRow(row);
307                                 }
308                                 System.out.println(tableForecasts.getRowCount());
309                         }
310                 });
311                 tableForecasts.addMouseListener(new MouseAdapter() {
312                         @Override
313                         public void mouseClicked(MouseEvent e) {
314                                 int i = tableForecasts.getSelectedRow();
315                                 forecast = forecasts.get(i);
316                                 btnCreateBet.setEnabled(true);
317
318                                 System.out.println(forecast.toString());
319                                 textBet.setText(String.valueOf(que.getBetMinimum()));
320                         }
321                 });
322
323                 tableForecasts.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
324                         @Override
325                         public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
326                                         boolean hasFocus, int row, int column) {
327                                 final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row,
328                                                 column);
329
330                                 c.setBackground(row % 2 != 0 ? new Color(233, 233, 233) : Color.WHITE);
331
332                                 return c;
333                         }
334                 });
335
336                 tableEvents.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
337                         @Override
338                         public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
339                                         boolean hasFocus, int row, int column) {
340                                 final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row,
341                                                 column);
342
343                                 c.setBackground(row % 2 != 0 ? new Color(233, 233, 233) : Color.WHITE);
344
345                                 return c;
346                         }
347                 });
348
349                 tableQueries.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
350                         @Override
351                         public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
352                                         boolean hasFocus, int row, int column) {
353                                 final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row,
354                                                 column);
355
356                                 c.setBackground(row % 2 != 0 ? new Color(233, 233, 233) : Color.WHITE);
357
358                                 return c;
359                         }
360                 });
361
362                 scrollPaneEvents.setViewportView(tableEvents);
363                 tableModelEvents = new DefaultTableModel(null, columnNamesEvents) {
364                         @Override
365                         public boolean isCellEditable(int row, int column) {
366                                 return false;
367                         }
368                 };
369
370                 tableEvents.setModel(tableModelEvents);
371                 tableEvents.getColumnModel().getColumn(0).setPreferredWidth(25);
372                 tableEvents.getColumnModel().getColumn(1).setPreferredWidth(268);
373
374                 scrollPaneQueries.setViewportView(tableQueries);
375                 tableModelQueries = new DefaultTableModel(null, columnNamesQueries) {
376                         @Override
377                         public boolean isCellEditable(int row, int column) {
378                                 return false;
379                         }
380                 };
381
382                 tableQueries.setModel(tableModelQueries);
383                 tableQueries.getColumnModel().getColumn(0).setPreferredWidth(25);
384                 tableQueries.getColumnModel().getColumn(1).setPreferredWidth(268);
385
386                 scrollPaneForecasts.setViewportView(tableForecasts);
387                 tableModelForecasts = new DefaultTableModel(null, columnNamesForecasts) {
388                         @Override
389                         public boolean isCellEditable(int row, int column) {
390                                 return false;
391                         }
392                 };
393
394                 tableForecasts.setModel(tableModelForecasts);
395                 tableForecasts.getColumnModel().getColumn(0).setPreferredWidth(25);
396                 tableForecasts.getColumnModel().getColumn(1).setPreferredWidth(100);
397                 tableForecasts.getColumnModel().getColumn(2).setPreferredWidth(25);
398
399                 this.getContentPane().add(scrollPaneEvents, null);
400                 this.getContentPane().add(scrollPaneQueries, null);
401                 this.getContentPane().add(scrollPaneForecasts);
402                 btnCreateBet.setForeground(Color.WHITE);
403                 btnCreateBet.setFont(new Font("Dialog", Font.BOLD, 14));
404                 btnCreateBet.setBackground(SystemColor.textHighlight);
405
406                 btnCreateBet.setEnabled(false);
407                 btnCreateBet.addActionListener(new ActionListener() {
408
409                         @Override
410                         public void actionPerformed(ActionEvent e) {
411                                 System.out.println(que.toString());
412                                 float betP = Float.parseFloat(textBet.getText());
413                                 String b = textBet.getText();
414                                 Forecast f = forecast;
415
416                                 if (b.equals("")) {
417                                         JOptionPane.showMessageDialog(getContentPane(), "El bet no puede estar vacío", "Error",
418                                                         JOptionPane.ERROR_MESSAGE);
419                                 } else {
420                                         int inserted = facade.createApuesta(forecast, userlog, betP);
421                                         if (inserted == 0) {
422                                                 JOptionPane.showMessageDialog(getContentPane(), "Apuesta realizada correctamente" + "\n"
423                                                                 + "Has apostado a " + forecast.getForecast() + " con " + betP + "€");
424                                                 System.out.println("APUESTA CORRECTAMENTE REALIZADA");
425 //                                              lblSaldo.setText(ResourceBundle.getBundle("Etiquetas").getString("CreateBetGUI.lblSaldo_2.text")
426 //                                                              + " " + (newUserActualizado.getBalance() - betP) + "€");
427                                                 lblSaldo.setText("lblSaldo_2" + " " + (newUserActualizado.getBalance() - betP) + "€");
428                                                 textBet.setText(String.valueOf(que.getBetMinimum()));
429                                         } else if (inserted == 4) {
430                                                 JOptionPane.showMessageDialog(getContentPane(), "No puedes apostar valores negativos");
431                                                 textBet.setText(String.valueOf(que.getBetMinimum()));
432                                         } else if (inserted == 3) {
433                                                 JOptionPane.showMessageDialog(getContentPane(), "No puedes apostar por debajo de lo mínimo");
434                                                 textBet.setText(String.valueOf(que.getBetMinimum()));
435                                         } else if (inserted == 2) {
436                                                 JOptionPane.showMessageDialog(getContentPane(), "No dispone de saldo suficiente");
437                                                 textBet.setText(String.valueOf(que.getBetMinimum()));
438                                         }
439                                         newUserActualizado = facade.getRegularUserByUsername(userlog.getUserName());
440
441                                 }
442
443                         }
444                 });
445                 btnCreateBet.setBounds(new Rectangle(100, 275, 130, 30));
446                 btnCreateBet.setBounds(439, 419, 130, 30);
447                 getContentPane().add(btnCreateBet);
448
449 //              JLabel lblNewLabel = new JLabel(
450 //                              ResourceBundle.getBundle("Etiquetas").getString("CreateBetGUI.lblNewLabel.text")); //$NON-NLS-1$ //$NON-NLS-2$
451                 JLabel lblNewLabel = new JLabel("Bet"); //$NON-NLS-1$ //$NON-NLS-2$
452                 lblNewLabel.setBounds(268, 380, 26, 14);
453                 getContentPane().add(lblNewLabel);
454
455                 textBet = new JTextField();
456                 textBet.setHorizontalAlignment(SwingConstants.LEFT);
457                 textBet.setForeground(Color.GRAY);
458                 textBet.setFont(new Font("Arial", Font.PLAIN, 15));
459 //              textBet.setToolTipText(ResourceBundle.getBundle("Etiquetas").getString("CreateBetGUI.textFee.toolTipText")); //$NON-NLS-1$ //$NON-NLS-2$
460 //              textBet.setText(ResourceBundle.getBundle("Etiquetas").getString("CreateBetGUI.textFee.text")); //$NON-NLS-1$ //$NON-NLS-2$
461                 textBet.setToolTipText("Bet Amount");
462                 textBet.setBounds(new Rectangle(100, 211, 429, 20));
463                 textBet.setBounds(293, 377, 89, 20);
464                 getContentPane().add(textBet);
465
466                 JLabel lblNewLabel_1 = new JLabel(
467 //                              ResourceBundle.getBundle("Etiquetas").getString("CreateBetGUI.lblNewLabel_1.text")); //$NON-NLS-1$ //$NON-NLS-2$
468 //              lblNewLabel_1.setBounds(385, 380, 26, 14);
469                                 "€"); //$NON-NLS-1$ //$NON-NLS-2$
470                 lblNewLabel_1.setBounds(385, 380, 26, 14);
471                 getContentPane().add(lblNewLabel_1);
472
473                 JPanel panel = new JPanel();
474                 panel.setBackground(new Color(0, 0, 128));
475                 panel.setBounds(549, 15, 140, 25);
476                 getContentPane().add(panel);
477
478 //              lblSaldo = new JLabel(
479 //                              ResourceBundle.getBundle("Etiquetas").getString("MainGUI.lblSaldo") + " " + userlog.getBalance() + "€");
480                 lblSaldo = new JLabel("Balance" + " " + userlog.getBalance() + "€");
481                 panel.add(lblSaldo);
482                 lblSaldo.setFont(new Font("Tahoma", Font.BOLD, 14));
483                 lblSaldo.setForeground(Color.WHITE);
484
485         }
486 }