Package hexenschach.gui

Source Code of hexenschach.gui.SaveDialog

package hexenschach.gui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.JTextField;
import hexenschach.gameplay.GameContext;
import hexenschach.gui.event.GameEvent;
import hexenschach.gui.event.GameEventType;
import hexenschach.gui.resources.Images;

/**
* Dialog zum Speichern des aktuellen Spielstandes.
* @author Tobias Marquardt
*/
public class SaveDialog extends HexenschachDialog {
  private static final long serialVersionUID = 2814453676448167177L;
  // Eingabefeld
  private JTextField input;
  // Buttons
  DialogButton saveButton;
  DialogButton cancelButton;
  // Vorhandene Spielstände
  ArrayList <String> saveGames;
  // Größe des Eingabefeldes
  static final int xSizeTextField = 260;
  static final int ySizeTextField = 30;
 
  SaveDialog(GUI parent) {
    super(parent, 300, 180);
    saveGames = parent.getPersistence().getSaveGames();
    initListener();
  }
  @Override
  public void initComponents() {
    // Hintergrundbild
    Background background = new Background(Images.getSaveDialogBackground(), xSize, ySize);
    // Label
    JLabel prompt = new JLabel(Dictionary.SaveDialogPrompt);
    prompt.setForeground(new Color(236, 182, 74));
    prompt.setBounds(20, 10, 260, 40);
    background.add(prompt);
    // Eingabefeld
    input = new JTextField();
    input.setBackground(new Color(170, 71, 12, 255));
    input.setForeground(new Color(236, 182, 74, 255));
    input.setFont(new Font("Dialog", Font.PLAIN, 20));
    input.setPreferredSize(new Dimension(xSizeTextField, ySizeTextField));
    input.setBounds(20, 80, xSizeTextField, ySizeTextField);
    background.add(input);
    // Buttons
    saveButton = new DialogButton("", Images.getDialogSaveButtonDefaultImage(), Images.getDialogSaveButtonRolloverImage(), Images.getDialogSaveButtonPressedImage(), Images.getDialogSaveButtonDisabledImage());
    saveButton.setEnabled(false)// Button zu Beginn ausgegraut
    saveButton.setBounds(60, 130, DialogButton.xSize, DialogButton.ySize);
    saveButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        saveButtonClicked();
      }
    });
    cancelButton = new DialogButton("", Images.getDialogCancelButtonDefaultImage(), Images.getDialogCancelButtonRolloverImage(), Images.getDialogCancelButtonPressedImage());
    cancelButton.setBounds(180, 130, DialogButton.xSize, DialogButton.ySize);
    cancelButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        cancelButtonClicked();
      }
    });
   
    background.add(saveButton);
    background.add(cancelButton);
    add(background);
  }
  /**
   * Initialisiert die benötigten Event-Listener.
   */
  private void initListener() {
    // Dem Textfeld einen KeyListener hinzufügen, um die Eingabe direkt zu überprüfen.
    input.addKeyListener(new KeyListener() {
      @Override
      public void keyTyped(KeyEvent e) {
        inputChanged();
      }
      @Override
      public void keyReleased(KeyEvent e) {
        inputChanged();
      }
      @Override
      public void keyPressed(KeyEvent e) {
        inputChanged();
      }
    });
  }
  @Override
  public void initLayout() {}
  /**
   * Enthält die Aktion, die beim Klick auf den
   * Abbrechen-Button ausgeführt werden soll.
   */
  protected void cancelButtonClicked() {
    // Fenster schließen
    setVisible(false);
  }
  /**
   * Enthält die Aktion, die beim Klick auf den
   * Speichern-Button ausgeführt werden soll.
   */
  protected void saveButtonClicked() {
    // Aktuellen Spielstand speichern
    // Sicherstellen, ob wirklich ein Gameplay vorhanden ist,
    // wird eigentlich schon dadurch gemacht, dass der SaveButton in diesem Fall ausgegraut sein sollte.
//    if(parent.getGameplay() == null) { 
      String title = input.getText();
      GameContext context = parent.getGameplay().getGameContext();
      parent.getPersistence().saveGame(title, context);
      // Löse ein Event aus, um andere Klassen zu benachrichtigen, dass ein Spiel gespeichert wurde
      GameEvent event = new GameEvent(this, GameEventType.GAME_SAVED);
      parent.gameEventHappened(event);
      setVisible(false);
      MessageDialog saveSuccess = new MessageDialog(parent, Dictionary.SaveDialogComfirmation);
      saveSuccess.setVisible(true);
//    }
//    else {
//      setVisible(false);
//      MessageDialog saveFail = new MessageDialog(parent, Dictionary.SaveDialogFail);
//      saveFail.setVisible(true);
//    }
  }
  /**
   * Wird aufgerufen, wenn sich im Textfeld etwas ändert.
   * Überprüft die Eingabe.
   */
  private void inputChanged() {
    //
    if(input.getText().equals("") || saveGames.contains(input.getText()))
      saveButton.setEnabled(false);
    else
      saveButton.setEnabled(true);
  }

}
TOP

Related Classes of hexenschach.gui.SaveDialog

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.