Package de.achim.turnier.tabellen

Source Code of de.achim.turnier.tabellen.PrintTable

package de.achim.turnier.tabellen;

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.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.RowFilter;
import javax.swing.RowSorter;
import javax.swing.SortOrder;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

import de.achim.turnier.Turniervewaltung2;
import de.achim.turnier.utility.ITabellen;
import de.achim.turnier.utility.MannschaftErgebnis;

public class TabellenPanel extends JPanel implements ITabellen{
 
  private static final int WIDTH = 400;
  private static final int HEIGHT = 80;

  private int gruppe = 1;
 
  private MannschaftErgebnis me;
  TableRowSorter sorter;
 
  private String[] columnNames = {"Mannschaft",
      "Spiele",
            "Tore +",
            "Tore -",
            "Tordifferenz",
            "Punkte",
            "sortiertab"};
 
  /*private String[] cols = new String[3];

  private Object[] data = {"", new Integer(5),
          new Integer(0),
          new Integer(0),
          new Integer(0),
          new Integer(0),
          new Integer(0)};*/
 

  DefaultTableModel dataModel = new DefaultTableModel();

  private JTable table;
  private JPanel motherPanel;
  private JLabel title;
 
  public TabellenPanel(){
   
    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, false);
    sorter.setSortable(3, false);
    sorter.setSortable(4, false);
    sorter.setSortable(5, false);
    sorter.setSortable(6, true);
    List <RowSorter.SortKey> sortKeys  = new ArrayList<RowSorter.SortKey>();
    //sortKeys.add(new RowSorter.SortKey(1, SortOrder.ASCENDING));
    sortKeys.add(new RowSorter.SortKey(6, SortOrder.DESCENDING));
    sorter.setSortKeys(sortKeys);

    sorter.setComparator(6, new PunkteComparator());
   
    table = new JTable(dataModel);
    table.setRowSorter(sorter);

    setLayout(new BorderLayout());
   
    JButton druckButton = new JButton("Drucken");
    ActionListener al = new PrintTable(this);
    druckButton.addActionListener(al);
   
    add(title, BorderLayout.NORTH);
    add(table.getTableHeader(), BorderLayout.PAGE_START);
    add(table, BorderLayout.CENTER);
    add(druckButton, BorderLayout.SOUTH);

  }
 
  public JTable getTable() {
    return table;
  }
 
  public JLabel getTitle() {
    return this.title;
  }
 
  public void setTitle(String title) {
    if(this.title.getText().length() <= 0){
      this.title.setText(title);
      revalidate();
    }
  }
 
  public void addRow(MannschaftErgebnis me){
    this.me = me;
    if(!checkExistance(me)){
      Integer toreDiff = me.getManschaftTorePlus() - me.getMannschaftToreMinus();
      Object[] rowData = {me.getMannschaftName(),
          new Integer(1),             //ist das erste Spiel der Mannschaft
          me.getManschaftTorePlus(),
          me.getMannschaftToreMinus(),
          toreDiff,
          me.getMannschaftPunkte(),
          calcSortValue(me.getMannschaftPunkte(), toreDiff, me.getManschaftTorePlus())};
      dataModel.addRow(rowData);
    }
   
    table.getColumn(table.getColumnModel().getColumn(6).getIdentifier()).setPreferredWidth(-1);
    table.getColumn(table.getColumnModel().getColumn(6).getIdentifier()).setMaxWidth(-1);
    dataModel.fireTableChanged(new TableModelEvent(dataModel));
    dataModel.fireTableDataChanged();
    revalidate();
  }
 
  public void initFromFile(Vector<String> vLine){
    Iterator<String> iter = vLine.iterator();
    while(iter.hasNext()){
      String s = iter.next();
      initFromLine(s);
    }
  }
 
  public void initFromLine(String s){
    StringTokenizer st = new StringTokenizer(s, ";");
    MannschaftErgebnis me = new MannschaftErgebnis(st.nextToken());
    me.setMannschaftSpiele(new Integer(st.nextToken()));
    me.setManschaftTorePlus(new Integer(st.nextToken()));
    me.setMannschaftToreMinus(new Integer(st.nextToken()));
    st.nextToken();
    me.setMannschaftPunkte(new Integer(st.nextToken()));
   
    addRow(me);
  }
 
 
  public JPanel getMotherPanel() {
    return this.motherPanel;
  }

  public void setMotherPanel(JPanel motherPanel) {
    this.motherPanel = motherPanel;
  }
 
  public String toString(){
   
    StringBuffer sb = new StringBuffer();
    int rc = table.getRowCount();
    int cc = table.getColumnCount();
      for(int row = 0; row < rc; row++){
        for(int column = 0; column < cc-1; column++ ){
        sb.append(table.getValueAt(row, column)).append(";");
      }
      sb.append(gruppe);
      sb.append("\n");
    }
    return sb.toString();
  }
 
  /**
   * testen ob mannschaft schon in der Tabelle eingetragen wurde
   * 
   */
  private boolean checkExistance(MannschaftErgebnis me){
   
    boolean vorhanden = false;
    int rowcount = dataModel.getRowCount();
    // der Name steht in der ersten Spalte
   
    int manschaftname = 0;
    for(int row = 0; row<rowcount;row++){
      String name = ((String)dataModel.getValueAt(row, manschaftname)).trim();
      if(name.equals(me.getMannschaftName())){
        updateRow(me, row);
        return true;
      }
    }
    table.getColumn(table.getColumnModel().getColumn(6).getIdentifier()).setPreferredWidth(-1);
    table.getColumn(table.getColumnModel().getColumn(6).getIdentifier()).setMaxWidth(-1);
    dataModel.fireTableChanged(new TableModelEvent(dataModel));
    dataModel.fireTableDataChanged();
    return vorhanden;
   
  }
 
  /**
   * vorhandenen Eintrag aktualisieren
   */
 
  private void updateRow(MannschaftErgebnis me, int row){
    /*
     * new Integer(1),
        me.getManschaftTorePlus(),
        me.getMannschaftToreMinus(),
        new Integer(me.getManschaftTorePlus() - me.getMannschaftToreMinus()),
        me.getMannschaftPunkte()
     */
    Integer spiele = (Integer) dataModel.getValueAt(row, 1);
    Integer torePlus = (Integer) dataModel.getValueAt(row, 2);
    Integer toreMinus = (Integer) dataModel.getValueAt(row, 3);
    Integer toreDiff = (Integer) dataModel.getValueAt(row, 4);
    Integer punkte = (Integer) dataModel.getValueAt(row, 5);
  //  Integer sortValue =  (Integer) dataModel.getValueAt(row, 6);
   
    spiele = spiele + 1;
   
    torePlus = torePlus + me.getManschaftTorePlus();
    toreMinus = toreMinus + me.getMannschaftToreMinus();
    toreDiff = torePlus - toreMinus;
    punkte = punkte + me.getMannschaftPunkte();
    Integer sortValue = calcSortValue(punkte, toreDiff, torePlus);
   
    dataModel.setValueAt(spiele, row, 1);
    dataModel.setValueAt(torePlus, row, 2);
    dataModel.setValueAt(toreMinus, row, 3);
    dataModel.setValueAt(toreDiff, row, 4);
    dataModel.setValueAt(punkte, row, 5);
    dataModel.setValueAt(sortValue, row, 6);
  }
 
  private Integer calcSortValue(Integer punkte, Integer torediff, Integer toreplus){
    Integer gewichtPunkte = 10000;
    Integer gewichtDiff = 100;
    Integer gewichtTorepLus = 1;
   
    Integer summe = gewichtPunkte * punkte;
    summe = summe + (gewichtDiff * torediff);
    summe = summe + (gewichtTorepLus * toreplus);
    return summe;
  }

  /**
   * @return the gruppe
   */
  public int getGruppe() {
    return this.gruppe;
  }

  /**
   * @param gruppe the gruppe to set
   */
  public void setGruppe(int gruppe) {
    this.gruppe = gruppe;
  }

}

class PrintTable implements ActionListener {
 
  TabellenPanel tp;
 
  public PrintTable (TabellenPanel t){
    this.tp = t;
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    ((Turniervewaltung2)((TabellenContainer)tp.getMotherPanel()).getMotherFrame()).printData(tp);
  }
 
}
TOP

Related Classes of de.achim.turnier.tabellen.PrintTable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.