package de.achim.turnier.endrunde;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.SortOrder;
import javax.swing.event.TableModelEvent;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import de.achim.turnier.Turniervewaltung2;
import de.achim.turnier.tabellen.TabellenContainer;
import de.achim.turnier.utility.ITabellen;
public class EndrundenTabelle extends JPanel implements ITabellen{
private static final int WIDTH = 400;
private static final int HEIGHT = 80;
private EndrundenErgebnis enderg;
TableRowSorter sorter;
private String[] columnNames = {"Platzierung", "Mannschaft", "Sorter"};
DefaultTableModel dataModel = new DefaultTableModel();
//private Object[] data = {new Integer(0), "", new Double(0) };
private JTable table;
private JPanel motherPanel;
private JLabel title;
private int tabsize = 2;
public EndrundenTabelle(){
title = new JLabel();
Font font = new Font( Font.SANS_SERIF, Font.PLAIN, 20 );
title.setFont(font);
title.setHorizontalAlignment(title.CENTER);
dataModel.setColumnIdentifiers(columnNames);
sorter = new TableRowSorter(dataModel);
sorter.setSortable(0, false);
sorter.setSortable(1, false);
sorter.setSortable(2, true);
List <RowSorter.SortKey> sortKeys = new ArrayList<RowSorter.SortKey>();
sortKeys.add(new RowSorter.SortKey(2, SortOrder.DESCENDING));
sorter.setSortKeys(sortKeys);
sorter.setComparator(2, new EndRundeTabComperator()); //endrundencomparator
table = new JTable(dataModel);
table.setRowSorter(sorter);
setLayout(new BorderLayout());
JButton druckButton = new JButton("Drucken");
ActionListener al = new PrintEndrundenTabelle(this);
druckButton.addActionListener(al);
add(title, BorderLayout.NORTH);
add(table.getTableHeader(), BorderLayout.PAGE_START);
add(table, BorderLayout.CENTER);
add(druckButton, BorderLayout.SOUTH);
}
public JLabel getTitle() {
return this.title;
}
public void setTitle(String title) {
if(this.title.getText().length() <= 0){
this.title.setText(title);
revalidate();
}
}
public JTable getTable() {
return table;
}
public void addRow(EndrundenErgebnis eerg){
this.enderg = eerg;
Integer torediff = enderg.getTore1() - enderg.getTore2();
Object[] rowData1 = {"", enderg.getMannschaft1(), calcSortValue(enderg.getSpielum(), torediff) };
Object[] rowData2 = {"", enderg.getMannschaft2(), calcSortValue(enderg.getSpielum(), torediff*-1) };
dataModel.addRow(rowData1);
dataModel.addRow(rowData2);
table.getColumn(table.getColumnModel().getColumn(2).getIdentifier()).setPreferredWidth(-1);
table.getColumn(table.getColumnModel().getColumn(2).getIdentifier()).setMaxWidth(-1);
dataModel.fireTableChanged(new TableModelEvent(dataModel));
dataModel.fireTableDataChanged();
int row = table.getRowCount();
for(int i = 0; i< row; i++){
int platzierung = i+1;
String platz = "Platz " +platzierung;
table.setValueAt(platz, i, 0);
}
revalidate();
}
public JPanel getMotherPanel() {
return this.motherPanel;
}
public void setMotherPanel(JPanel motherPanel) {
this.motherPanel = motherPanel;
}
/**
* @param tabsize the tabsize to set
*/
public void setTabsize(int tabsize) {
this.tabsize = tabsize;
}
/**
* @return the tabsize
*/
public int getTabsize() {
return this.tabsize;
}
private Double calcSortValue(String s, int torediff){
double spielum = new Double(s);
double gewichtvat = spielum * -1;
double sortval = Math.pow(10, gewichtvat);
if(torediff > 0){
return sortval * 3;
} else
return sortval * 1;
}
}
class PrintEndrundenTabelle implements ActionListener {
EndrundenTabelle etp;
public PrintEndrundenTabelle (EndrundenTabelle t){
this.etp = t;
}
@Override
public void actionPerformed(ActionEvent e) {
((Turniervewaltung2)((TabellenContainer)etp.getMotherPanel()).getMotherFrame()).printData(etp);
}
}