4 import java.awt.Component;
5 import java.awt.Dimension;
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;
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;
34 import com.toedter.calendar.JCalendar;
36 import businessLogic.BLFacade;
37 import configuration.UtilDate;
38 import domain.Forecast;
39 import domain.Question;
40 import domain.RegularUser;
42 public class CreateBetGUI extends JFrame {
43 private static final long serialVersionUID = 1L;
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");
52 // private JButton jButtonClose = new JButton(ResourceBundle.getBundle("Etiquetas").getString("Close"));
53 private JButton jButtonClose = new JButton("Close");
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();
63 private Vector<Date> datesWithEventsCurrentMonth = new Vector<Date>();
65 private JTable tableEvents = new JTable();
66 private JTable tableQueries = new JTable();
67 private JTable tableForecasts = new JTable();
69 private DefaultTableModel tableModelEvents;
70 private DefaultTableModel tableModelQueries;
71 private DefaultTableModel tableModelForecasts;
73 // private String[] columnNamesEvents = new String[] { ResourceBundle.getBundle("Etiquetas").getString("EventN"),
74 // ResourceBundle.getBundle("Etiquetas").getString("Event"),
77 // private String[] columnNamesQueries = new String[] { ResourceBundle.getBundle("Etiquetas").getString("QueryN"),
78 // ResourceBundle.getBundle("Etiquetas").getString("Query")
82 // private String[] columnNamesForecasts = new String[] { ResourceBundle.getBundle("Etiquetas").getString("ForecastN"),
83 // ResourceBundle.getBundle("Etiquetas").getString("Forecast"), "Fee"
86 private String[] columnNamesEvents = new String[] { "EventN", "Event",
89 private String[] columnNamesQueries = new String[] { "QueryN", "Query"
93 private String[] columnNamesForecasts = new String[] { "ForecastN", "Forecast", "Fee"
97 private Forecast forecast;
98 private static BLFacade facade = LoginGUI.getBusinessLogic();
99 private JTextField textBet;
101 private RegularUser userlog = null;
102 private RegularUser newUserActualizado;
103 private Vector<Forecast> forecasts;
104 private Vector<Question> queries;
105 private JLabel lblSaldo;
107 // private JButton btnCreateBet = new
108 // JButton(ResourceBundle.getBundle("Etiquetas").getString("MakeBet"));
109 private JButton btnCreateBet = new JButton("Bet");
111 public static void setBusinessLogic(BLFacade pfacade) {
115 public static BLFacade getBusinessLogic() {
119 public CreateBetGUI(RegularUser u) {
120 getContentPane().setBackground(Color.WHITE);
122 newUserActualizado = u;
126 } catch (Exception e) {
131 private void jbInit() throws Exception {
133 this.getContentPane().setLayout(null);
134 this.setSize(new Dimension(730, 550));
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);
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);
150 jButtonClose.setBounds(new Rectangle(57, 419, 130, 30));
152 jButtonClose.addActionListener(new ActionListener() {
154 public void actionPerformed(ActionEvent e) {
155 Frame gui = new MainGUI(newUserActualizado);
156 gui.setAlwaysOnTop(true);
157 gui.setVisible(true);
163 this.getContentPane().add(jButtonClose, null);
165 jCalendar1.setBounds(new Rectangle(40, 50, 225, 150));
167 datesWithEventsCurrentMonth = facade.getEventsMonth(jCalendar1.getDate());
168 CreateQuestionGUI.paintDaysWithEvents(jCalendar1, datesWithEventsCurrentMonth);
170 // Code for JCalendar
171 this.jCalendar1.addPropertyChangeListener(new PropertyChangeListener() {
173 public void propertyChange(PropertyChangeEvent propertychangeevent) {
174 btnCreateBet.setEnabled(false);
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()));
185 int monthAnt = calendarAnt.get(Calendar.MONTH);
186 int monthAct = calendarAct.get(Calendar.MONTH);
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);
197 jCalendar1.setCalendar(calendarAct);
199 BLFacade facade = LoginGUI.getBusinessLogic();
201 datesWithEventsCurrentMonth = facade.getEventsMonth(jCalendar1.getDate());
204 CreateQuestionGUI.paintDaysWithEvents(jCalendar1, datesWithEventsCurrentMonth);
207 tableModelEvents.setDataVector(null, columnNamesEvents);
208 tableModelEvents.setColumnCount(3); // another column added to allocate ev objects
210 // BLFacade facade = LoginGUI.getBusinessLogic();
212 Vector<domain.Event> events = facade.getEvents(firstDay);
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()));
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>();
226 System.out.println("Events " + ev);
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);
235 tableEvents.getColumnModel().getColumn(0).setPreferredWidth(25);
236 tableEvents.getColumnModel().getColumn(1).setPreferredWidth(268);
237 tableEvents.getColumnModel().removeColumn(tableEvents.getColumnModel().getColumn(2));
239 tableModelQueries.setRowCount(0);
240 tableModelForecasts.setRowCount(0);
242 } catch (Exception e1) {
244 jLabelQueries.setText(e1.getMessage());
251 this.getContentPane().add(jCalendar1, null);
253 scrollPaneEvents.setBounds(new Rectangle(292, 50, 346, 150));
255 scrollPaneQueries.setBounds(new Rectangle(10, 236, 372, 116));
257 scrollPaneForecasts.setBounds(new Rectangle(410, 236, 204, 116));
259 tableEvents.addMouseListener(new MouseAdapter() {
261 public void mouseClicked(MouseEvent e) {
262 tableModelForecasts.setRowCount(0);
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);
269 tableModelQueries.setDataVector(null, columnNamesQueries);
271 if (queries.isEmpty())
272 // jLabelQueries.setText(
273 // ResourceBundle.getBundle("Etiquetas").getString("NoQueries") + ": " + ev.getDescription());
274 jLabelQueries.setText("NoQueries" + ": " + ev.getDescription());
276 // jLabelQueries.setText(ResourceBundle.getBundle("Etiquetas").getString("SelectedEvent") + " "
277 // + ev.getDescription());
278 jLabelQueries.setText("SelectedEvent" + " " + ev.getDescription());
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);
286 tableQueries.getColumnModel().getColumn(0).setPreferredWidth(25);
287 tableQueries.getColumnModel().getColumn(1).setPreferredWidth(268);
290 tableQueries.addMouseListener(new MouseAdapter() {
293 public void mouseClicked(MouseEvent e) {
294 tableModelForecasts.setRowCount(0);
295 int i = tableQueries.getSelectedRow();
296 que = queries.get(i);
297 btnCreateBet.setEnabled(false);
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());
306 tableModelForecasts.addRow(row);
308 System.out.println(tableForecasts.getRowCount());
311 tableForecasts.addMouseListener(new MouseAdapter() {
313 public void mouseClicked(MouseEvent e) {
314 int i = tableForecasts.getSelectedRow();
315 forecast = forecasts.get(i);
316 btnCreateBet.setEnabled(true);
318 System.out.println(forecast.toString());
319 textBet.setText(String.valueOf(que.getBetMinimum()));
323 tableForecasts.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
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,
330 c.setBackground(row % 2 != 0 ? new Color(233, 233, 233) : Color.WHITE);
336 tableEvents.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
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,
343 c.setBackground(row % 2 != 0 ? new Color(233, 233, 233) : Color.WHITE);
349 tableQueries.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
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,
356 c.setBackground(row % 2 != 0 ? new Color(233, 233, 233) : Color.WHITE);
362 scrollPaneEvents.setViewportView(tableEvents);
363 tableModelEvents = new DefaultTableModel(null, columnNamesEvents) {
365 public boolean isCellEditable(int row, int column) {
370 tableEvents.setModel(tableModelEvents);
371 tableEvents.getColumnModel().getColumn(0).setPreferredWidth(25);
372 tableEvents.getColumnModel().getColumn(1).setPreferredWidth(268);
374 scrollPaneQueries.setViewportView(tableQueries);
375 tableModelQueries = new DefaultTableModel(null, columnNamesQueries) {
377 public boolean isCellEditable(int row, int column) {
382 tableQueries.setModel(tableModelQueries);
383 tableQueries.getColumnModel().getColumn(0).setPreferredWidth(25);
384 tableQueries.getColumnModel().getColumn(1).setPreferredWidth(268);
386 scrollPaneForecasts.setViewportView(tableForecasts);
387 tableModelForecasts = new DefaultTableModel(null, columnNamesForecasts) {
389 public boolean isCellEditable(int row, int column) {
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);
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);
406 btnCreateBet.setEnabled(false);
407 btnCreateBet.addActionListener(new ActionListener() {
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;
417 JOptionPane.showMessageDialog(getContentPane(), "El bet no puede estar vacío", "Error",
418 JOptionPane.ERROR_MESSAGE);
420 int inserted = facade.createApuesta(forecast, userlog, betP);
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()));
439 newUserActualizado = facade.getRegularUserByUsername(userlog.getUserName());
445 btnCreateBet.setBounds(new Rectangle(100, 275, 130, 30));
446 btnCreateBet.setBounds(439, 419, 130, 30);
447 getContentPane().add(btnCreateBet);
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);
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);
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);
473 JPanel panel = new JPanel();
474 panel.setBackground(new Color(0, 0, 128));
475 panel.setBounds(549, 15, 140, 25);
476 getContentPane().add(panel);
478 // lblSaldo = new JLabel(
479 // ResourceBundle.getBundle("Etiquetas").getString("MainGUI.lblSaldo") + " " + userlog.getBalance() + "€");
480 lblSaldo = new JLabel("Balance" + " " + userlog.getBalance() + "€");
482 lblSaldo.setFont(new Font("Tahoma", Font.BOLD, 14));
483 lblSaldo.setForeground(Color.WHITE);