Package gui

Source Code of gui.ClientGUI

/*
* ClientGUI.java
*
* Created on 15. Januar 2008, 14:45
*/
package gui;

import data.Duell;
import data.User;
import db.Datenbank;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;
import javax.swing.SwingWorker;
import javax.swing.Timer;
import javax.swing.UIManager;

/**
*
* @author  Kevin
*/
public class ClientGUI extends javax.swing.JFrame
{
  private User loggedUser = null;
  private List<User> onlineUsers = new LinkedList<User>();
  private List<Duell> duelle = new LinkedList<Duell>();
  DefaultListModel model = new DefaultListModel();
  private Duell duell = null;
  /* Timer damit dauernd überprüft wird, wer online ist.Delay ist die
   * Verzögerung in Millisekunden, der ActionListener ist was passieren
   * soll (model updaten). Sobald ein User eingeloggt ist, wird der Timer
   * gestartet, beim ausloggen wieder gestoppt. */
  private int delay = 3000;
  ActionListener aktualisiereOnline = new ActionListener()
  {
    public void actionPerformed(ActionEvent evt)
    {
      /* TODO: Bessere Variante statt model.clear!! Vor allem weil beim
       * Model leeren auch die Selektion wegfällt!
       */
      model.clear();
      (new UpdateListWorker()).execute();
    }
  };
  Timer timer = new Timer(delay, aktualisiereOnline);

  /** Creates new form ClientGUI */
  public ClientGUI()
  {
    try
    {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch (Exception ex)
    {
    }
    initComponents();
    getRootPane().setDefaultButton(btStart);
    listSpieler.setModel(model);
  }
  /** This method is called from within the constructor to
   * initialize the form.8
   * WARNING: Do NOT modify this code. The content of this method is
   * always regenerated by the Form Editor.
   */
  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  private void initComponents() {
    java.awt.GridBagConstraints gridBagConstraints;

    hauptpanel = new javax.swing.JPanel();
    jPanel1 = new javax.swing.JPanel();
    btStart = new javax.swing.JButton();
    jScrollPane1 = new javax.swing.JScrollPane();
    listSpieler = new javax.swing.JList();
    menuBar = new javax.swing.JMenuBar();
    menuDatei = new javax.swing.JMenu();
    miLogin = new javax.swing.JMenuItem();
    miLogout = new javax.swing.JMenuItem();
    jSeparator1 = new javax.swing.JSeparator();
    miBeenden = new javax.swing.JMenuItem();
    menuStatistiken = new javax.swing.JMenu();
    menuInfo = new javax.swing.JMenu();
    miGrundidee = new javax.swing.JMenuItem();
    miAnleitung = new javax.swing.JMenuItem();
    miAbout = new javax.swing.JMenuItem();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("DieLämma");
    setMinimumSize(new java.awt.Dimension(79, 70));
    addWindowListener(new java.awt.event.WindowAdapter() {
      public void windowClosing(java.awt.event.WindowEvent evt) {
        onX(evt);
      }
    });

    hauptpanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
    hauptpanel.setLayout(new java.awt.BorderLayout());

    jPanel1.setLayout(new java.awt.GridBagLayout());

    btStart.setText("Start");
    btStart.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        onStart(evt);
      }
    });
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.insets = new java.awt.Insets(10, 0, 0, 0);
    jPanel1.add(btStart, gridBagConstraints);

    hauptpanel.add(jPanel1, java.awt.BorderLayout.SOUTH);

    jScrollPane1.setViewportView(listSpieler);

    hauptpanel.add(jScrollPane1, java.awt.BorderLayout.CENTER);

    getContentPane().add(hauptpanel, java.awt.BorderLayout.CENTER);

    menuDatei.setMnemonic('D');
    menuDatei.setText("Datei");

    miLogin.setText("Login");
    miLogin.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        onLogin(evt);
      }
    });
    menuDatei.add(miLogin);

    miLogout.setText("Logout");
    miLogout.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        onLogout(evt);
      }
    });
    menuDatei.add(miLogout);
    menuDatei.add(jSeparator1);

    miBeenden.setText("Beenden");
    miBeenden.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        onBeenden(evt);
      }
    });
    menuDatei.add(miBeenden);

    menuBar.add(menuDatei);

    menuStatistiken.setMnemonic('S');
    menuStatistiken.setText("Statistiken");
    menuBar.add(menuStatistiken);

    menuInfo.setMnemonic('I');
    menuInfo.setText("Info");

    miGrundidee.setText("Grundidee");
    miGrundidee.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        onGrundidee(evt);
      }
    });
    menuInfo.add(miGrundidee);

    miAnleitung.setText("Anleitung");
    miAnleitung.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        onAnleitung(evt);
      }
    });
    menuInfo.add(miAnleitung);

    miAbout.setText("About");
    miAbout.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        onAbout(evt);
      }
    });
    menuInfo.add(miAbout);

    menuBar.add(menuInfo);

    setJMenuBar(menuBar);

    pack();
  }// </editor-fold>//GEN-END:initComponents
  private void onBeenden(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onBeenden
    // Wie beim ausloggen
    if (loggedUser != null)
    {
      loggedUser.setOnline(false);
      (new UpdateOnlineWorker(loggedUser)).execute();
    }
    dispose();
  }//GEN-LAST:event_onBeenden

  private class UpdateListWorker extends SwingWorker
  {
    public UpdateListWorker()
    {
    }

    protected Object doInBackground()
      throws Exception
    {
      try
      {
        onlineUsers = Datenbank.getInstance().getOnlineUsers();
        for (User user : onlineUsers)
        {
          model.addElement(user.getNick());
        }
      }
      catch (SQLException ex)
      {
        ex.printStackTrace();
      }
      catch (ClassNotFoundException ex)
      {
        ex.printStackTrace();
      }
      return null;
    }

    protected void done()
    {
      try
      {
        get();
      }
      catch (InterruptedException ex)
      {
      }
      catch (ExecutionException ex)
      {
        JOptionPane.showMessageDialog(null, ex.getCause().getMessage(),
          "Fehler", JOptionPane.ERROR_MESSAGE);
      }
    }
  }

  private void onLogin(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onLogin
    if (loggedUser == null)
    {
      LoginDlg dlg = new LoginDlg(this, true);
      dlg.setVisible(true);
      if (dlg.isOk())
      {
        // Eingeloggter User wird in der Titelleiste angezeigt
        loggedUser = dlg.getNewUser();
        loggedUser.setOnline(true);
        (new UpdateOnlineWorker(loggedUser)).execute();
        this.setTitle("DieLämma - (Eingeloggt als: " + loggedUser.getNick() + ")");
        timer.start();
      }
    }
    else
    {
      JOptionPane.showMessageDialog(this, "Es ist bereits ein Benutzer eingeloggt!",
        "Fehler", JOptionPane.ERROR_MESSAGE);
    }
  }//GEN-LAST:event_onLogin

  private class UpdateOnlineWorker extends SwingWorker
  {
    private final User user;

    public UpdateOnlineWorker(User user)
    {
      this.user = user;
    }

    protected Object doInBackground()
      throws Exception
    {
      //TODO: umändern, da der Server jegliche Kommunikation erhalten muss und der Server
      //hat die Erlaubnis auf die Datenbank zuzugreifen!
      Datenbank.getInstance().updateOnlineAndIp(user);
      return null;
    }

    protected void done()
    {
      try
      {
        get();
      }
      catch (InterruptedException ex)
      {
      }
      catch (ExecutionException ex)
      {
        JOptionPane.showMessageDialog(null, ex.getCause().getMessage(),
          "Fehler", JOptionPane.ERROR_MESSAGE);
      }
    }
  }

  private void onLogout(java.awt.event.ActionEvent evt) {                                                                         
    // Status wird auf offline und Titel wieder auf DieLämma gesetzt
    try
    {
      if (loggedUser != null)
      {
        loggedUser.setOnline(false);
        (new UpdateOnlineWorker(loggedUser)).execute();
      }
    this.setTitle("DieLämma");
      loggedUser = null;
      timer.stop();
      model.clear();
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
    }
  }                                                 
 
  private class AddDuellWorker extends SwingWorker
  {
    private final Duell duell;

    public AddDuellWorker(Duell duell)
    {
      this.duell = duell;
    }

    protected Object doInBackground()
      throws Exception
    {
      Datenbank.getInstance().addDuell(duell);
      return null;
    }

    protected void done()
    {
      try
      {
        get();
      }
      catch (InterruptedException ex)
      {
      }
      catch (ExecutionException ex)
      {
        JOptionPane.showMessageDialog(null, ex.getCause().getMessage(),
          "Fehler", JOptionPane.ERROR_MESSAGE);
      }
    }
  }
 
private void onStart(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onStart
  if (loggedUser != null)
  {
    try
    {
      int selSpieler = listSpieler.getSelectedIndex();
      String nick2 = model.get(selSpieler).toString();
      String ip = Datenbank.getInstance().getIpFromUser(nick2);
      duell = new Duell(loggedUser.getNick(), nick2, 0, 0, 0, 0, 0, 0, 0,
        false, false, 0, 0, false);
      (new AddDuellWorker(duell)).execute();
      DuellDlg dlg = new DuellDlg(this, true);
      dlg.setVisible(true);
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
    }
  }
  else
  {
    JOptionPane.showMessageDialog(this, "Kein Benutzer eingeloggt!",
      "Fehler", JOptionPane.ERROR_MESSAGE);
  }
}//GEN-LAST:event_onStart
// <editor-fold defaultstate="collapsed" desc="Textdialoge">
private void onGrundidee(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onGrundidee
  TextDlg dlg = new TextDlg(this,true,
   
    "Das Gefangenendilemma \n\n" +
    "Zwei Gefangene werden verdächtigt, gemeinsam eine Straftat begangen zu haben. Die Höchststrafe für das Verbrechen beträgt fünf \n" +
    "Jahre. Beiden Gefangenen wird nun ein Handel angeboten, worüber auch beide informiert sind. Wenn einer gesteht und somit seinen \n" +
    "Partner mitbelastet, kommt er ohne Strafe davon – der andere muss die vollen fünf Jahre absitzen. Entscheiden sich beide zu \n" +
    "schweigen, bleiben nur Indizienbeweise, die aber ausreichen, um beide für zwei Jahre einzusperren. \n\n" +
   
    "Gestehen aber beide die Tat, erwartet jeden eine Gefängnisstrafe von vier Jahren."+
    "Nun werden die Gefangenen unabhängig voneinander\n" +
    "befragt. Weder vor noch während der Befragung haben die beiden die Möglichkeit, sich untereinander abzusprechen." +
    "\n\n---------------------------------------------------------------\n\n" +
   
    "Schuld und Unschuld\n\n" +
    "Im Gefangenendilemma spielt die Frage von tatsächlicher Schuld oder Unschuld für das Resultat keine Rolle. Das wirkt sich so aus,\n " +
    "dass auch der Unschuldige besser wegkommt, wenn er gesteht – in dem Fall etwas, das er nicht getan hat. Da moralische Bedenken \n" +
    "und die Hoffnung auf Erweis der Unschuld den Unschuldigen davon abhalten, zu gestehen, was er nicht getan hat, muss er dann oft die \n" +
    "schlechtere Stellung einnehmen, die sich aus dem Nichtgeständnis ergibt. Wenn die Strafe für Nichtgestehen sehr hoch ist, gestehen \n" +
    "auch viele Unschuldige alles. Das Dilemma kommt insbesondere bei Schauprozessen zum Tragen."
   
    ,"Grundidee");
  dlg.setVisible(true);
}//GEN-LAST:event_onGrundidee

private void onAnleitung(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onAnleitung
  TextDlg dlg = new TextDlg(this,true,
    "Im Grunde stehen jedem Spieler nur 2 Möglichkeiten zur Verfügung, entweder kooperieren oder nicht kooperieren. \n" +
    "Dadurch entstehen nur 4 mögliche Szenarien: \n\n" +
    "\tSpieler 1: kooperiert\tSpieler 2: kooperiert nicht\n" +
    "\tSpieler 1: kooperiert nicht\tSpieler 2: kooperiert\n" +
    "\tSpieler 1: kooperiert\tSpieler 2: kooperiert\n" +
    "\tSpieler 1: kooperiert nicht\tSpieler 2: kooperiert nicht" +
    "\n\n---------------------------------------------------------------\n\n" +
    "Berechnet wird wie folgt:\n"+
    "0\t„Versuchung” (temptation)– Belohnung für einseitigen Verrat (Freiheit)\n"+
    "-2\t„Belohnung” (reward) – Belohnung für Kooperation von A und B (nur zwei Jahre Strafe)\n"+
    "-4\t„Bestrafung” (punishment) – Bestrafung für gegenseitigen Verrat (vier Jahre Strafe)\n"+
    "-5\t„Des Gutgläubigen Belohnung” (sucker's payoff) – Bestrafung für Vertrauen, \n" +
    "\tdas Vertrauen wurde einseitig durch den Partner gebrochen (fünf Jahre Strafe)"
   
    ,"Anleitung");
  dlg.setVisible(true);
}//GEN-LAST:event_onAnleitung

private void onAbout(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onAbout
  TextDlg dlg = new TextDlg(this,true,"About","About");
  dlg.setVisible(true);
}//GEN-LAST:event_onAbout
//</editor-fold>
private void onX(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_onX
  //ausloggen, wenn auf das X gedrückt wird
  if (loggedUser != null)
    {
      loggedUser.setOnline(false);
      (new UpdateOnlineWorker(loggedUser)).execute();
    }
}//GEN-LAST:event_onX

  /**
   * @param args the command line arguments
   */
  public static void main(String args[])
  {
    java.awt.EventQueue.invokeLater(new Runnable()
    {
      public void run()
      {
        new ClientGUI().setVisible(true);
      }
    });
  }
  // Variables declaration - do not modify//GEN-BEGIN:variables
  private javax.swing.JButton btStart;
  private javax.swing.JPanel hauptpanel;
  private javax.swing.JPanel jPanel1;
  private javax.swing.JScrollPane jScrollPane1;
  private javax.swing.JSeparator jSeparator1;
  private javax.swing.JList listSpieler;
  private javax.swing.JMenuBar menuBar;
  private javax.swing.JMenu menuDatei;
  private javax.swing.JMenu menuInfo;
  private javax.swing.JMenu menuStatistiken;
  private javax.swing.JMenuItem miAbout;
  private javax.swing.JMenuItem miAnleitung;
  private javax.swing.JMenuItem miBeenden;
  private javax.swing.JMenuItem miGrundidee;
  private javax.swing.JMenuItem miLogin;
  private javax.swing.JMenuItem miLogout;
  // End of variables declaration//GEN-END:variables
}
TOP

Related Classes of gui.ClientGUI

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.