package gui; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.Rectangle; import java.awt.SystemColor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.DateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.Vector; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import com.toedter.calendar.JCalendar; import businessLogic.BLFacade; import configuration.UtilDate; import domain.Forecast; import domain.Question; import domain.RegularUser; public class CreateBetGUI extends JFrame { private static final long serialVersionUID = 1L; // private final JLabel jLabelEventDate = new JLabel(ResourceBundle.getBundle("Etiquetas").getString("EventDate")); // private final JLabel jLabelQueries = new JLabel(ResourceBundle.getBundle("Etiquetas").getString("Queries")); // private final JLabel jLabelEvents = new JLabel(ResourceBundle.getBundle("Etiquetas").getString("Events")); private final JLabel jLabelEventDate = new JLabel("EventDate"); private final JLabel jLabelQueries = new JLabel("Queries"); private final JLabel jLabelEvents = new JLabel("Events"); // private JButton jButtonClose = new JButton(ResourceBundle.getBundle("Etiquetas").getString("Close")); private JButton jButtonClose = new JButton("Close"); // Code for JCalendar private JCalendar jCalendar1 = new JCalendar(); private Calendar calendarAnt = null; private Calendar calendarAct = null; private JScrollPane scrollPaneEvents = new JScrollPane(); private JScrollPane scrollPaneQueries = new JScrollPane(); private JScrollPane scrollPaneForecasts = new JScrollPane(); private Vector datesWithEventsCurrentMonth = new Vector(); private JTable tableEvents = new JTable(); private JTable tableQueries = new JTable(); private JTable tableForecasts = new JTable(); private DefaultTableModel tableModelEvents; private DefaultTableModel tableModelQueries; private DefaultTableModel tableModelForecasts; // private String[] columnNamesEvents = new String[] { ResourceBundle.getBundle("Etiquetas").getString("EventN"), // ResourceBundle.getBundle("Etiquetas").getString("Event"), // // }; // private String[] columnNamesQueries = new String[] { ResourceBundle.getBundle("Etiquetas").getString("QueryN"), // ResourceBundle.getBundle("Etiquetas").getString("Query") // // }; // // private String[] columnNamesForecasts = new String[] { ResourceBundle.getBundle("Etiquetas").getString("ForecastN"), // ResourceBundle.getBundle("Etiquetas").getString("Forecast"), "Fee" // // }; private String[] columnNamesEvents = new String[] { "EventN", "Event", }; private String[] columnNamesQueries = new String[] { "QueryN", "Query" }; private String[] columnNamesForecasts = new String[] { "ForecastN", "Forecast", "Fee" }; private Question que; private Forecast forecast; private static BLFacade facade = LoginGUI.getBusinessLogic(); private JTextField textBet; private RegularUser userlog = null; private RegularUser newUserActualizado; private Vector forecasts; private Vector queries; private JLabel lblSaldo; // private JButton btnCreateBet = new // JButton(ResourceBundle.getBundle("Etiquetas").getString("MakeBet")); private JButton btnCreateBet = new JButton("Bet"); public static void setBusinessLogic(BLFacade pfacade) { facade = pfacade; } public static BLFacade getBusinessLogic() { return facade; } public CreateBetGUI(RegularUser u) { getContentPane().setBackground(Color.WHITE); userlog = u; newUserActualizado = u; try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { this.getContentPane().setLayout(null); this.setSize(new Dimension(730, 550)); // this.setTitle(ResourceBundle.getBundle("Etiquetas").getString("MakeBet") // + " " + userlog.getUserName()); this.setTitle("MakeBet" + " " + userlog.getUserName()); jLabelEventDate.setBounds(new Rectangle(40, 15, 140, 25)); jLabelQueries.setBounds(10, 211, 406, 14); jLabelEvents.setBounds(295, 19, 259, 16); this.getContentPane().add(jLabelEventDate, null); this.getContentPane().add(jLabelQueries); this.getContentPane().add(jLabelEvents); jButtonClose.setFont(new Font("Dialog", Font.BOLD, 14)); jButtonClose.setForeground(Color.WHITE); jButtonClose.setBackground(SystemColor.controlShadow); jButtonClose.setBounds(new Rectangle(57, 419, 130, 30)); jButtonClose.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Frame gui = new MainGUI(newUserActualizado); gui.setAlwaysOnTop(true); gui.setVisible(true); dispose(); } }); this.getContentPane().add(jButtonClose, null); jCalendar1.setBounds(new Rectangle(40, 50, 225, 150)); datesWithEventsCurrentMonth = facade.getEventsMonth(jCalendar1.getDate()); CreateQuestionGUI.paintDaysWithEvents(jCalendar1, datesWithEventsCurrentMonth); // Code for JCalendar this.jCalendar1.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent propertychangeevent) { btnCreateBet.setEnabled(false); if (propertychangeevent.getPropertyName().equals("locale")) { jCalendar1.setLocale((Locale) propertychangeevent.getNewValue()); } else if (propertychangeevent.getPropertyName().equals("calendar")) { calendarAnt = (Calendar) propertychangeevent.getOldValue(); calendarAct = (Calendar) propertychangeevent.getNewValue(); DateFormat dateformat1 = DateFormat.getDateInstance(1, jCalendar1.getLocale()); // jCalendar1.setCalendar(calendarAct); Date firstDay = UtilDate.trim(new Date(jCalendar1.getCalendar().getTime().getTime())); int monthAnt = calendarAnt.get(Calendar.MONTH); int monthAct = calendarAct.get(Calendar.MONTH); if (monthAct != monthAnt) { if (monthAct == monthAnt + 2) { // Si en JCalendar está 30 de enero y se avanza al mes siguiente, devolvería 2 // de marzo (se toma como equivalente a 30 de febrero) // Con este código se dejará como 1 de febrero en el JCalendar calendarAct.set(Calendar.MONTH, monthAnt + 1); calendarAct.set(Calendar.DAY_OF_MONTH, 1); } jCalendar1.setCalendar(calendarAct); BLFacade facade = LoginGUI.getBusinessLogic(); datesWithEventsCurrentMonth = facade.getEventsMonth(jCalendar1.getDate()); } CreateQuestionGUI.paintDaysWithEvents(jCalendar1, datesWithEventsCurrentMonth); try { tableModelEvents.setDataVector(null, columnNamesEvents); tableModelEvents.setColumnCount(3); // another column added to allocate ev objects // BLFacade facade = LoginGUI.getBusinessLogic(); Vector events = facade.getEvents(firstDay); if (events.isEmpty()) // jLabelEvents.setText(ResourceBundle.getBundle("Etiquetas").getString("NoEvents") + ": " // + dateformat1.format(calendarAct.getTime())); jLabelEvents.setText("NoEvents" + ": " + dateformat1.format(calendarAct.getTime())); else // jLabelEvents.setText(ResourceBundle.getBundle("Etiquetas").getString("Events") + ": " // + dateformat1.format(calendarAct.getTime())); jLabelEvents.setText("Events" + ": " + dateformat1.format(calendarAct.getTime())); for (domain.Event ev : events) { if (!ev.getClosed()) { Vector row = new Vector(); System.out.println("Events " + ev); row.add(ev.getEventNumber()); row.add(ev.getDescription()); row.add(ev); // ev object added in order to obtain it with // tableModelEvents.getValueAt(i,2) tableModelEvents.addRow(row); } } tableEvents.getColumnModel().getColumn(0).setPreferredWidth(25); tableEvents.getColumnModel().getColumn(1).setPreferredWidth(268); tableEvents.getColumnModel().removeColumn(tableEvents.getColumnModel().getColumn(2)); tableModelQueries.setRowCount(0); tableModelForecasts.setRowCount(0); } catch (Exception e1) { jLabelQueries.setText(e1.getMessage()); } } } }); this.getContentPane().add(jCalendar1, null); scrollPaneEvents.setBounds(new Rectangle(292, 50, 346, 150)); scrollPaneQueries.setBounds(new Rectangle(10, 236, 372, 116)); scrollPaneForecasts.setBounds(new Rectangle(410, 236, 204, 116)); tableEvents.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { tableModelForecasts.setRowCount(0); int i = tableEvents.getSelectedRow(); domain.Event ev = (domain.Event) tableModelEvents.getValueAt(i, 2); // obtain ev object queries = ev.getQuestions(); btnCreateBet.setEnabled(false); tableModelQueries.setDataVector(null, columnNamesQueries); if (queries.isEmpty()) // jLabelQueries.setText( // ResourceBundle.getBundle("Etiquetas").getString("NoQueries") + ": " + ev.getDescription()); jLabelQueries.setText("NoQueries" + ": " + ev.getDescription()); else // jLabelQueries.setText(ResourceBundle.getBundle("Etiquetas").getString("SelectedEvent") + " " // + ev.getDescription()); jLabelQueries.setText("SelectedEvent" + " " + ev.getDescription()); for (domain.Question q : queries) { Vector row = new Vector(); row.add(q.getQuestionNumber()); row.add(q.getQuestion()); tableModelQueries.addRow(row); } tableQueries.getColumnModel().getColumn(0).setPreferredWidth(25); tableQueries.getColumnModel().getColumn(1).setPreferredWidth(268); } }); tableQueries.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { tableModelForecasts.setRowCount(0); int i = tableQueries.getSelectedRow(); que = queries.get(i); btnCreateBet.setEnabled(false); forecasts = que.getForecasts(); System.out.println("TAMAÑO FORECASTS: " + forecasts.size()); for (domain.Forecast f : forecasts) { Vector row = new Vector(); row.add(f.getForecastNumber()); row.add(f.getForecast()); row.add(f.getFee()); tableModelForecasts.addRow(row); } System.out.println(tableForecasts.getRowCount()); } }); tableForecasts.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int i = tableForecasts.getSelectedRow(); forecast = forecasts.get(i); btnCreateBet.setEnabled(true); System.out.println(forecast.toString()); textBet.setText(String.valueOf(que.getBetMinimum())); } }); tableForecasts.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); c.setBackground(row % 2 != 0 ? new Color(233, 233, 233) : Color.WHITE); return c; } }); tableEvents.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); c.setBackground(row % 2 != 0 ? new Color(233, 233, 233) : Color.WHITE); return c; } }); tableQueries.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); c.setBackground(row % 2 != 0 ? new Color(233, 233, 233) : Color.WHITE); return c; } }); scrollPaneEvents.setViewportView(tableEvents); tableModelEvents = new DefaultTableModel(null, columnNamesEvents) { @Override public boolean isCellEditable(int row, int column) { return false; } }; tableEvents.setModel(tableModelEvents); tableEvents.getColumnModel().getColumn(0).setPreferredWidth(25); tableEvents.getColumnModel().getColumn(1).setPreferredWidth(268); scrollPaneQueries.setViewportView(tableQueries); tableModelQueries = new DefaultTableModel(null, columnNamesQueries) { @Override public boolean isCellEditable(int row, int column) { return false; } }; tableQueries.setModel(tableModelQueries); tableQueries.getColumnModel().getColumn(0).setPreferredWidth(25); tableQueries.getColumnModel().getColumn(1).setPreferredWidth(268); scrollPaneForecasts.setViewportView(tableForecasts); tableModelForecasts = new DefaultTableModel(null, columnNamesForecasts) { @Override public boolean isCellEditable(int row, int column) { return false; } }; tableForecasts.setModel(tableModelForecasts); tableForecasts.getColumnModel().getColumn(0).setPreferredWidth(25); tableForecasts.getColumnModel().getColumn(1).setPreferredWidth(100); tableForecasts.getColumnModel().getColumn(2).setPreferredWidth(25); this.getContentPane().add(scrollPaneEvents, null); this.getContentPane().add(scrollPaneQueries, null); this.getContentPane().add(scrollPaneForecasts); btnCreateBet.setForeground(Color.WHITE); btnCreateBet.setFont(new Font("Dialog", Font.BOLD, 14)); btnCreateBet.setBackground(SystemColor.textHighlight); btnCreateBet.setEnabled(false); btnCreateBet.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println(que.toString()); float betP = Float.parseFloat(textBet.getText()); String b = textBet.getText(); Forecast f = forecast; if (b.equals("")) { JOptionPane.showMessageDialog(getContentPane(), "El bet no puede estar vacío", "Error", JOptionPane.ERROR_MESSAGE); } else { int inserted = facade.createApuesta(forecast, userlog, betP); if (inserted == 0) { JOptionPane.showMessageDialog(getContentPane(), "Apuesta realizada correctamente" + "\n" + "Has apostado a " + forecast.getForecast() + " con " + betP + "€"); System.out.println("APUESTA CORRECTAMENTE REALIZADA"); // lblSaldo.setText(ResourceBundle.getBundle("Etiquetas").getString("CreateBetGUI.lblSaldo_2.text") // + " " + (newUserActualizado.getBalance() - betP) + "€"); lblSaldo.setText("lblSaldo_2" + " " + (newUserActualizado.getBalance() - betP) + "€"); textBet.setText(String.valueOf(que.getBetMinimum())); } else if (inserted == 4) { JOptionPane.showMessageDialog(getContentPane(), "No puedes apostar valores negativos"); textBet.setText(String.valueOf(que.getBetMinimum())); } else if (inserted == 3) { JOptionPane.showMessageDialog(getContentPane(), "No puedes apostar por debajo de lo mínimo"); textBet.setText(String.valueOf(que.getBetMinimum())); } else if (inserted == 2) { JOptionPane.showMessageDialog(getContentPane(), "No dispone de saldo suficiente"); textBet.setText(String.valueOf(que.getBetMinimum())); } newUserActualizado = facade.getRegularUserByUsername(userlog.getUserName()); } } }); btnCreateBet.setBounds(new Rectangle(100, 275, 130, 30)); btnCreateBet.setBounds(439, 419, 130, 30); getContentPane().add(btnCreateBet); // JLabel lblNewLabel = new JLabel( // ResourceBundle.getBundle("Etiquetas").getString("CreateBetGUI.lblNewLabel.text")); //$NON-NLS-1$ //$NON-NLS-2$ JLabel lblNewLabel = new JLabel("Bet"); //$NON-NLS-1$ //$NON-NLS-2$ lblNewLabel.setBounds(268, 380, 26, 14); getContentPane().add(lblNewLabel); textBet = new JTextField(); textBet.setHorizontalAlignment(SwingConstants.LEFT); textBet.setForeground(Color.GRAY); textBet.setFont(new Font("Arial", Font.PLAIN, 15)); // textBet.setToolTipText(ResourceBundle.getBundle("Etiquetas").getString("CreateBetGUI.textFee.toolTipText")); //$NON-NLS-1$ //$NON-NLS-2$ // textBet.setText(ResourceBundle.getBundle("Etiquetas").getString("CreateBetGUI.textFee.text")); //$NON-NLS-1$ //$NON-NLS-2$ textBet.setToolTipText("Bet Amount"); textBet.setBounds(new Rectangle(100, 211, 429, 20)); textBet.setBounds(293, 377, 89, 20); getContentPane().add(textBet); JLabel lblNewLabel_1 = new JLabel( // ResourceBundle.getBundle("Etiquetas").getString("CreateBetGUI.lblNewLabel_1.text")); //$NON-NLS-1$ //$NON-NLS-2$ // lblNewLabel_1.setBounds(385, 380, 26, 14); "€"); //$NON-NLS-1$ //$NON-NLS-2$ lblNewLabel_1.setBounds(385, 380, 26, 14); getContentPane().add(lblNewLabel_1); JPanel panel = new JPanel(); panel.setBackground(new Color(0, 0, 128)); panel.setBounds(549, 15, 140, 25); getContentPane().add(panel); // lblSaldo = new JLabel( // ResourceBundle.getBundle("Etiquetas").getString("MainGUI.lblSaldo") + " " + userlog.getBalance() + "€"); lblSaldo = new JLabel("Balance" + " " + userlog.getBalance() + "€"); panel.add(lblSaldo); lblSaldo.setFont(new Font("Tahoma", Font.BOLD, 14)); lblSaldo.setForeground(Color.WHITE); } }