package cl.rivendel.views;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.print.PrinterException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import org.jopendocument.dom.OOUtils;
import org.jopendocument.dom.spreadsheet.SpreadSheet;
import cl.rivendel.modelo.Jugador;
import cl.rivendel.modelo.Mesa;
import cl.rivendel.modelo.MesaTablaModel;
import cl.rivendel.modelo.Ronda;
import cl.rivendel.servicios.Services;
public class GestionadorTab extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JPanel tabPanMesas;
private JPanel tabPanJugadores;
private JTextField txtJugador;
private JTable tbl_jugadores;
private LinkedList<Jugador> listado;
private static Vector<String> columnNames;
private static Vector<String> columnNamesTablaMesa;
private static DefaultTableModel modelJugadores;
private static MesaTablaModel modelMesas;
private JButton btnAgregar;
private JButton btnPrimeraRonda;
private Services servicio;
private JTable tbl_mesas;
private JScrollPane scrollPane_1;
private JButton btnNuevaRonda;
private Ronda rondaActual;
private JTabbedPane tabbedPane;
private int posicionTabJugadores = 0;
private int posicionTabMesa = 1;
private JButton btnExportar;
private JButton btnImprimir;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GestionadorTab frame = new GestionadorTab();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public GestionadorTab() {
initComponents();
initEvents();
initTableProperties();
initTablesPanel();
}
private void initTableProperties() {
/*
* Tabla de jugadores
*/
tbl_jugadores.getTableHeader().setReorderingAllowed(false); // we do not
// allow
// to move columns
tbl_jugadores.setRowHeight(25);
// column names
Vector<String> nombresCols = new Vector<String>();
nombresCols.add("Nombre");
nombresCols.add("Puntos");
nombresCols.add("Logros");
columnNames = nombresCols;
/*
* tabla de mesas
*/
tbl_mesas.getTableHeader().setReorderingAllowed(false);
// to move columns
tbl_mesas.setRowHeight(25);
// column names
Vector<String> nombresColsTableMesas = new Vector<String>();
nombresColsTableMesas.add("N� Ronda");
nombresColsTableMesas.add("N� mesa");
nombresColsTableMesas.add("Jugador");
nombresColsTableMesas.add("Puntos");
columnNamesTablaMesa = nombresColsTableMesas;
}
private void initComponents() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 866, 568);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
tabbedPane = new JTabbedPane(JTabbedPane.TOP);
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(gl_contentPane.createParallelGroup(
Alignment.LEADING).addGroup(
gl_contentPane
.createSequentialGroup()
.addContainerGap()
.addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE,
820, Short.MAX_VALUE).addContainerGap()));
gl_contentPane.setVerticalGroup(gl_contentPane.createParallelGroup(
Alignment.LEADING).addGroup(
gl_contentPane
.createSequentialGroup()
.addContainerGap()
.addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE,
498, Short.MAX_VALUE).addContainerGap()));
tabPanJugadores = new JPanel();
tabbedPane.addTab("Jugadores", null, tabPanJugadores, null);
JLabel lblJugador = new JLabel("Jugador");
txtJugador = new JTextField();
txtJugador.setColumns(10);
JScrollPane scrollPane = new JScrollPane();
btnAgregar = new JButton("Agregar");
btnPrimeraRonda = new JButton("1� Ronda");
btnExportar = new JButton("Exportar");
GroupLayout gl_tabPanJugadores = new GroupLayout(tabPanJugadores);
gl_tabPanJugadores
.setHorizontalGroup(gl_tabPanJugadores
.createParallelGroup(Alignment.LEADING)
.addGroup(
gl_tabPanJugadores
.createSequentialGroup()
.addContainerGap()
.addGroup(
gl_tabPanJugadores
.createParallelGroup(
Alignment.LEADING)
.addComponent(
scrollPane,
GroupLayout.DEFAULT_SIZE,
805,
Short.MAX_VALUE)
.addGroup(
gl_tabPanJugadores
.createSequentialGroup()
.addComponent(
lblJugador)
.addPreferredGap(
ComponentPlacement.UNRELATED)
.addComponent(
txtJugador,
GroupLayout.PREFERRED_SIZE,
239,
GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
ComponentPlacement.RELATED)
.addComponent(
btnAgregar)
.addGap(18)
.addComponent(
btnPrimeraRonda)
.addPreferredGap(
ComponentPlacement.UNRELATED)
.addComponent(
btnExportar)))
.addContainerGap()));
gl_tabPanJugadores
.setVerticalGroup(gl_tabPanJugadores
.createParallelGroup(Alignment.LEADING)
.addGroup(
gl_tabPanJugadores
.createSequentialGroup()
.addContainerGap()
.addGroup(
gl_tabPanJugadores
.createParallelGroup(
Alignment.BASELINE)
.addComponent(
lblJugador)
.addComponent(
txtJugador,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addComponent(
btnAgregar)
.addComponent(
btnPrimeraRonda)
.addComponent(
btnExportar))
.addGap(20)
.addComponent(scrollPane,
GroupLayout.DEFAULT_SIZE, 405,
Short.MAX_VALUE)
.addContainerGap()));
tbl_jugadores = new JTable();
scrollPane.setViewportView(tbl_jugadores);
tabPanJugadores.setLayout(gl_tabPanJugadores);
tabPanMesas = new JPanel();
tabbedPane.addTab("Mesas", null, tabPanMesas, null);
scrollPane_1 = new JScrollPane();
tbl_mesas = new JTable();
scrollPane_1.setViewportView(tbl_mesas);
btnNuevaRonda = new JButton("Nueva Ronda");
btnImprimir = new JButton("Imprimir");
GroupLayout gl_tabPanMesas = new GroupLayout(tabPanMesas);
gl_tabPanMesas.setHorizontalGroup(gl_tabPanMesas
.createParallelGroup(Alignment.TRAILING)
.addGroup(
gl_tabPanMesas
.createSequentialGroup()
.addContainerGap()
.addComponent(scrollPane_1,
GroupLayout.PREFERRED_SIZE, 805,
GroupLayout.PREFERRED_SIZE)
.addContainerGap(GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
.addGroup(
gl_tabPanMesas.createSequentialGroup()
.addContainerGap(623, Short.MAX_VALUE)
.addComponent(btnNuevaRonda)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnImprimir).addContainerGap()));
gl_tabPanMesas.setVerticalGroup(gl_tabPanMesas.createParallelGroup(
Alignment.TRAILING)
.addGroup(
gl_tabPanMesas
.createSequentialGroup()
.addContainerGap(GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addGroup(
gl_tabPanMesas
.createParallelGroup(
Alignment.BASELINE)
.addComponent(btnNuevaRonda)
.addComponent(btnImprimir))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(scrollPane_1,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)));
tabPanMesas.setLayout(gl_tabPanMesas);
contentPane.setLayout(gl_contentPane);
// se inicializa la lista de jugadores
listado = new LinkedList<Jugador>();
servicio = new Services();
}
private void initEvents() {
// ========================================
// click on buttons agregar
// ========================================
btnAgregar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if (!txtJugador.getText().isEmpty()) {
Jugador jugador = new Jugador();
jugador.setNombre(txtJugador.getText());
addJugador(jugador);
txtJugador.setText("");
}
}
});
// ========================================
// click on buttons ronda
// ========================================
btnPrimeraRonda.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
rondaActual = servicio.calculaRondas(listado);
loadTableMesas(rondaActual);
tabbedPane.setSelectedIndex(posicionTabMesa);
}
});
// ========================================
// click on buttons nueva ronda
// ========================================
btnNuevaRonda.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
rondaActual = servicio.calculaRondas(rondaActual);
loadTableMesas(rondaActual);
}
});
// ========================================
// click on buttons tabs
// ========================================
tabPanJugadores.addComponentListener(new ComponentAdapter() {
@Override
public void componentShown(ComponentEvent arg0) {
actualizarPuntosjugadores();
}
});
// ========================================
// click on buttons exportar
// ========================================
btnExportar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Date hoy = Calendar.getInstance().getTime();
SimpleDateFormat format = new SimpleDateFormat();
format.applyPattern("dd-MM-yyyy");
String fecha = format.format(hoy);
final File file = new File("PosicionesComander" + fecha
+ ".ods");
try {
SpreadSheet.createEmpty(modelJugadores).saveAs(file);
OOUtils.open(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
// ========================================
// click on buttons Imprimir
// ========================================
btnImprimir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
boolean seImprimio = false;
try {
seImprimio = tbl_mesas.print();
} catch (PrinterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (seImprimio) {
System.out.println("impresion terminada");
} else {
System.out.println("Error en impresion");
}
}
});
}
private void initTablesPanel() {
// actualizarPuntosjugadores();
Vector<Object> jugadorData;
modelJugadores = new DefaultTableModel(null, columnNames); // first we
// add the
// column names
tbl_jugadores.setModel(modelJugadores); // update the model
tbl_jugadores.setAutoCreateRowSorter(true);
// we add each row of the table
for (Jugador c : listado) {
jugadorData = new Vector<Object>(); // we load a vector with the
// data of each row
jugadorData.add(c.getNombre()); // data for the column "Nombre"
jugadorData.add(c.getPuntos()); // data for the column "Punto"
jugadorData.add(c.getLogros()); // data for the column "Logro"
modelJugadores.addRow(jugadorData); // we add all data to the table
// model
}
tbl_jugadores.setModel(modelJugadores); // update the model
// Now, we have the model loaded, so we can modify its column properties
tbl_jugadores.getColumnModel().getColumn(0).setResizable(false);
tbl_jugadores.getColumnModel().getColumn(0).setPreferredWidth(200);
tbl_jugadores.getColumnModel().getColumn(1).setResizable(false);
tbl_jugadores.getColumnModel().getColumn(1).setPreferredWidth(200);
tbl_jugadores.getColumnModel().getColumn(2).setResizable(false);
tbl_jugadores.getColumnModel().getColumn(2).setPreferredWidth(200);
/*
* iniciamos la tabla de mesas
*/
// modelMesas = new DefaultTableModel(null, columnNamesTablaMesa);
modelMesas = new MesaTablaModel();
tbl_mesas.setModel(modelMesas);
tbl_mesas.setRowSorter(null);
// Now, we have the model loaded, so we can modify its column properties
tbl_mesas.getColumnModel().getColumn(0).setResizable(false);
tbl_mesas.getColumnModel().getColumn(0).setPreferredWidth(200);
tbl_mesas.getColumnModel().getColumn(1).setResizable(false);
tbl_mesas.getColumnModel().getColumn(1).setPreferredWidth(200);
tbl_mesas.getColumnModel().getColumn(2).setResizable(false);
tbl_mesas.getColumnModel().getColumn(2).setPreferredWidth(200);
}
public void addJugador(Jugador p_jugador) {
if (modelJugadores == null) {
modelJugadores = new DefaultTableModel(null, columnNames); // first
// we
// add
// the
}
Vector<Object> jugadorData;
jugadorData = new Vector<Object>();
jugadorData.add(p_jugador.getNombre()); // data for the column "Nombre"
jugadorData.add(p_jugador.getPuntos()); // data for the column "Punto"
jugadorData.add(p_jugador.getLogros()); // data for the column "Logro"
modelJugadores.addRow(jugadorData); // we add all data to the table
// model
tbl_jugadores.setModel(modelJugadores); // update the model
listado.add(p_jugador);
}
public void loadTableMesas(Ronda p_ronda) {
if (p_ronda == null) {
return;
}
// Vector<Object> mesaData;
List<Mesa> mesas = p_ronda.getMesas();
Integer numeroRonda = p_ronda.getNumeroRonda();
modelMesas = new MesaTablaModel(mesas, numeroRonda);
// for (Mesa mesa : mesas) {
//
// List<Jugador> jugadores = mesa.getJugadores();
//
// for (Jugador jugador : jugadores) {
//
// mesaData = new Vector<Object>();
//
// mesaData.add(numeroRonda);
//
// mesaData.add(mesa.getNumeroMesa()); // data for the column
// // "Nombre"
// mesaData.add(jugador.getNombre()); // data for the column
// // "Punto"
// mesaData.add(jugador.getPuntos()); // data for the column
// // "Logro"
//
// modelMesas.addRow(mesaData);
//
//
// }
//
// }
tbl_mesas.setModel(modelMesas); // update the model
}
@SuppressWarnings("unchecked")
private void actualizarPuntosjugadores() {
@SuppressWarnings("rawtypes")
Vector data = new Vector();
Vector<Object> jugadorData = null;
for (Jugador c : listado) {
jugadorData = new Vector<Object>(); // we load a vector with the
// data of each row
jugadorData.add(c.getNombre()); // data for the column "Nombre"
jugadorData.add(c.getPuntos()); // data for the column "Punto"
jugadorData.add(c.getLogros()); // data for the column "Logro"
data.add(jugadorData); // we add all data to the table model
}
Collections.sort(data, new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {
Vector<Object> vect1 = (Vector<Object>) o1;
Vector<Object> vect2 = (Vector<Object>) o2;
Integer puntos1 = (Integer) vect1.get(1);
Integer puntos2 = (Integer) vect2.get(1);
return puntos2.compareTo(puntos1);
}
});
modelJugadores.setDataVector(data, columnNames);
// model.get
tbl_jugadores.setModel(modelJugadores); // update the model
}
}