Package fmg.fmg8.pfeilGUI

Source Code of fmg.fmg8.pfeilGUI.PfeilController

/*
* Datei: SteuerFenster.java
* Autor(en):        Lukas K�nig
* Java-Version:     6.0
* Erstellt (vor): 19.12.2008
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/

package fmg.fmg8.pfeilGUI;

import fmg.fmg8.graphVis.zeichenModi.AusgMerkm;
import fmg.fmg8.sonstiges.DateiFilter;
import fmg.fmg8.statistik.Parametersatz;

import javax.swing.JColorChooser;

import java.awt.Button;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;

/**
* Klasse zur Repr�sentation eines Steuerfensters.
*
* @author Lukas K�nig
*/
public class PfeilController extends Frame
                           implements ActionListener,
                                      ItemListener {

    /**
     * Die Versions-ID.
     */
    private static final long serialVersionUID = 1L;

    /**
     * Die Parameter f�r den Lauf.
     */
    private Parametersatz pars;

    /**
     * Die Zeichenfenster.
     */
    private ArrayList<ZeichFen> graphen;
   
    /**
     * Der aktuell ausgew�hlte Graph.
     */
    private ZeichFen aktGrph;

    /**
     * Eine Textfeld, in dem der Zustandsname steht.
     */
    private TextField sonst;

    /**
     * Eine Textfeld, in dem die Aktion steht.
     */
    private TextField farbeA1;

    /**
     * Eine Textfeld, in dem der Parameter steht.
     */
    private TextField farbeA2;

    /**
     * Eine Textfeld, in dem das Alter des Zustands steht.
     */
    private TextField farbeA3;

    /**
     * Eine Textfeld, in dem die Aktion steht.
     */
    private TextField farbeB1;

    /**
     * Eine Textfeld, in dem der Parameter steht.
     */
    private TextField farbeB2;

    /**
     * Eine Textfeld, in dem das Alter des Zustands steht.
     */
    private TextField farbeB3;

    /**
     * Die Auswahl der Graphen als Auswahlfeld.
     */
    private Choice grAuswahl;

    /**
     * Graphfensterz�hler.
     */
    private int graphZaehl;

    /**
     * Aktuelle Ausgabemerkmale.
     */
    private AusgMerkm aktAusg;
   
    /**
     * Der Konstruktor.
     *
     * @param parameter  Der Parametersatz f�r den Lauf.
     */
    public PfeilController(final Parametersatz parameter) {
        super(Konstanten.PROG_NAME_PFEILE
                + " V "
                + Konstanten.PROG_VERSION_PFEILE);
        this.pars = parameter;
        this.aktAusg = null;
        this.reset();
    }
   
    /**
     * Setzt das Steuerfenster zur�ck.
     */
    public void reset() {
        this.removeAll();
       
        this.graphen = new ArrayList<ZeichFen>();
        this.aktGrph = null;
        this.graphZaehl = 0;

        this.setLocation(800, 0);
        this.setSize(300, 700);
        this.setzeSteuerelemente();
        this.ladeGraphen();
        this.setVisible(true);
    }

    /**
     * L�dt gespeicherte Graphen aus dem im Parameterobjekt angegebenen
     * Verzeichnis.
     */
    private void ladeGraphen() {
        File verz = new File(this.pars.getStdPfad());
        String endung = Konstanten.PFEIL_ENDUNG;
        String[] gespGr = verz.list(new DateiFilter(endung));
        String graphName;
        ZeichFen graphFenster;

        if (gespGr != null) {
            for (int i = 0; i < gespGr.length; i++) {
                graphName = gespGr[i].substring(
                                0,
                                gespGr[i].length() - endung.length() - 1);
               
                graphFenster = new ZeichFen(
                        Konstanten.ZEICHNUNG_NAME + i,
                        Konstanten.ZEICHNUNG_NAME + i,
                        this.pars,
                        i);

                this.grAuswahl.add(graphName);
                this.graphen.add(graphFenster);
                this.graphZaehl++;
            }
        }

        if (this.graphen.size() <= 0
                || this.grAuswahl.getItemCount() <= 0) {

            graphFenster = new ZeichFen(
                    Konstanten.ZEICHNUNG_NAME + 0,
                    Konstanten.ZEICHNUNG_NAME + 0,
                    this.pars,
                    0);

            this.grAuswahl.add(Konstanten.ZEICHNUNG_NAME + 0);
            this.graphen.add(graphFenster);
            this.graphZaehl++;
        }

        this.waehleGraph(0);
    }

    /**
     * W�hlt einen Graphen f�r die Darstellung aus.
     *
     * @param nummer  Die Nummer des zu w�hlenden Graphen.
     */
    private void waehleGraph(final int nummer) {
        int altX = 0;
        int altY = 0;

        if (this.aktGrph != null) {
            altX = this.aktGrph.getLocation().x;
            altY = this.aktGrph.getLocation().y;
        }

        this.aktGrph = (ZeichFen) this.graphen.get(nummer);
        this.aktGrph.setLocation(altX, altY);
        this.aktGrph.setVisible(true);
        this.grAuswahl.select(nummer);

        for (int i = 0; i < this.graphen.size(); i++) {
            if (i != nummer) {
                ((ZeichFen) this.graphen.get(i)).setVisible(false);
            }
        }
    }

    /**
     * Setzt alle Steuerelemente und Fenstereigenschaften.
     */
    private void setzeSteuerelemente() {
        this.setBackground(Color.lightGray);
        this.setLayout(new GridLayout(1, 1));

        Button b;
        Panel buttonPanel = new Panel();
        Panel buttonPanel2 = new Panel();
        Panel buttonPanel3 = new Panel();
        Panel buttonPanel4 = new Panel();
        Panel listPanel = new Panel();
        Panel editPanel = new Panel();
        Panel labelPanel = new Panel();
        listPanel.setLayout(new GridLayout(0, 1));
        editPanel.setLayout(new GridLayout(8, 1));
        labelPanel.setLayout(new GridLayout(4, 1));
        buttonPanel2.setLayout(new GridLayout(4, 2));
        buttonPanel3.setLayout(new GridLayout(6, 3));
        buttonPanel4.setLayout(new GridLayout(2, 1));
       
        Panel choiPan = new Panel(new GridLayout(1, 1));

        Panel p = new Panel();
        b = new Button("Beenden");
        b.addActionListener(this);
        buttonPanel.add(b);
        b = new Button("Modus");
        b.addActionListener(this);
        buttonPanel.add(b);
        b = new Button("Dicke");
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button("Normal");
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button("Speichern...");
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button("Bezier");
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button("Farbwahl...");
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button("8");
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button("9");
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button("10");
        b.addActionListener(this);
        buttonPanel2.add(b);
       
        this.farbeA1 = new TextField("", 5);
        this.farbeA2 = new TextField("", 5);
        this.farbeA3 = new TextField("", 5);
        this.farbeB1 = new TextField("", 5);
        this.farbeB2 = new TextField("", 5);
        this.farbeB3 = new TextField("", 5);
        this.sonst = new TextField("", 5);
        this.sonst.setEditable(false);

        labelPanel.add(new Label("L1", Label.LEFT));
        labelPanel.add(new Label("L2", Label.LEFT));
        labelPanel.add(new Label("L3", Label.LEFT));
        labelPanel.add(new Label("L4", Label.LEFT));
        editPanel.add(this.sonst);
        editPanel.add(this.farbeA1);
        editPanel.add(this.farbeA2);
        editPanel.add(this.farbeA3);
        editPanel.add(new Label("-----"));
        editPanel.add(this.farbeB1);
        editPanel.add(this.farbeB2);
        editPanel.add(this.farbeB3);

        this.grAuswahl = new Choice();
        choiPan.add(this.grAuswahl);
        this.grAuswahl.addItemListener(this);

        b = new Button("11");
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("12");
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("13");
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("14");
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("15");
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("16");
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("17");
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("18");
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("19");
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("20");
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("21");
        b.addActionListener(this);
        buttonPanel3.add(b);

        p.add(buttonPanel);
        p.add(listPanel);
        p.add(labelPanel);
        p.add(editPanel);
        p.add(buttonPanel2);
        p.add(choiPan);
        p.add(buttonPanel3);
        p.add(buttonPanel4);

        this.add(p);

        this.setResizable(true);
    }

    /**
     * Behandelt die �nderung des Listenelements.
     *
     * @param event  Das Event.
     */
    public void itemStateChanged(final ItemEvent event) {
        System.out.println("Item state changed.");
    }

    /**
     * Die actionPerformed Methode.
     *
     * @param event  Das Event.
     */
    public void actionPerformed(final ActionEvent event) {
        Object obj = event.getSource();
        String cmd = event.getActionCommand();
        Iterator<ZeichFen> itG;
        int fehler = 0;
       
        this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

        itG = this.graphen.iterator();
        while (itG.hasNext()) {
            ((ZeichFen) itG.next()).setCursor(new Cursor(Cursor.WAIT_CURSOR));
        }

        try {
            if (obj instanceof Button) {
                if (cmd.equals("Beenden")) {
                    WindowClosingAdapter ende
                        = new WindowClosingAdapter(true);
                    ende.schliesseExt(this);
                } else if (cmd.equals("Modus")) {
                    boolean b1;
                    boolean b2;
                   
                    b1 = this.aktGrph.isMarkiereEcken();
                    b2 = this.aktGrph.isZeichneGrundPfeil();
                   
                    if (!b1 && !b2) { // 00
                        b1 = true;
                        b2 = false;
                    } else if (!b1 && b2) { // 01
                        b1 = false;
                        b2 = false;
                    } else if (b1 && !b2) { // 10
                        b1 = true;
                        b2 = true;
                    } else if (b1 && b2) { // 11
                        b1 = false;
                        b2 = true;
                    }
                   
                    this.aktGrph.setMarkiereEcken(b1);
                    this.aktGrph.setZeichneGrundPfeil(b2);
                   
                } else if (cmd.equals("Dicke")) {
                    double dicke = Double.parseDouble(this.farbeA1.getText());
                    this.aktGrph.setAktDicke(dicke);
                } else if (cmd.equals("Normal")) {
                    this.aktGrph.normalisiere();
                } else if (cmd.equals("Bezier")) {
                    double bK = 2;
                   
                    if (!this.farbeA1.getText().equals("")) {
                        bK = Double.parseDouble(this.farbeA1.getText());
                    }
                   
                    this.aktGrph.bezier(bK);
                } else if (cmd.equals("Farbwahl...")) {
                    Color ausg1 = null;
                    Color ausg2 = null;
                   
                    if (this.aktAusg != null) {
                        ausg1 = this.aktAusg.getRahmenFarbe();
                        ausg2 = this.aktAusg.getFuellFarbe();
                    }
                   
                    ausg1 = JColorChooser.showDialog(
                            this,
                            "Rahmenfarbe w�hlen",
                            ausg1);
                    ausg2 = JColorChooser.showDialog(
                            this,
                            "F�llfarbe w�hlen",
                            ausg2);
                   
                    this.aktAusg = new AusgMerkm(
                            ausg1,
                            ausg2,
                            ausg1 != null,
                            ausg2 != null);
                   
                    this.aktGrph.setzeAktSegAusg(this.aktAusg);
                } else if (cmd.equals("Speichern...")) {
                    FileDialog dia;
                    String oldVerz;
                   
                    dia = new FileDialog(this,
                                         "Pfeil als PNG speichern",
                                         FileDialog.SAVE);
                   
                    dia.setFilenameFilter(new DateiFilter("png"));
                   
                    dia.setVisible(true);

                    if (!(dia.getDirectory() == null)
                        && !(dia.getFile() == null)) {
                        oldVerz = this.pars.getStdPfad();
                        this.pars.setStdPfad(dia.getDirectory());
                        this.aktGrph.savePNG(dia.getFile());
                        this.pars.setStdPfad(oldVerz);
                    }
                }
            }
           
        } catch (Exception e) {
            fehler = 2;
            e.printStackTrace();
        } finally {
            this.aktGrph.neuZeichnen(fehler);
           
            itG = this.graphen.iterator();
            while (itG.hasNext()) {
                ((ZeichFen) itG.next()).setCursor(
                        new Cursor(Cursor.DEFAULT_CURSOR));
            }
            this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
        }
    }

    /**
     * Erzeugt einen neuen Graphen mit dem ersten freien Standardnamen.
     *
     * @return Der neue Graph.
     */
    public ZeichFen neuerGraph() {
        String graphName = "";
        int graphNummer = 0;
        ZeichFen graphFenster;
        boolean ok = false;

        while (!ok) {
            graphName = "graph" + graphNummer;
            Iterator<ZeichFen> it = this.graphen.iterator();
            ok = true;
            while (it.hasNext()) {
                if (((ZeichFen)
                    it.next()).toString().equals(graphName)) {
                    ok = false;
                }
            }
            graphNummer++;
        }

        graphFenster = new ZeichFen(
                Konstanten.ZEICHNUNG_NAME + this.kleinsteFreieID(),
                Konstanten.ZEICHNUNG_NAME + this.kleinsteFreieID(),
                this.pars,
                this.kleinsteFreieID());

        this.grAuswahl.add(graphName);
        this.graphen.add(graphFenster);
        this.graphZaehl++;
       
        return graphFenster;
    }

    /**
     * Aktuellen Graphen setzen.
     *
     * @param aktGr The aktGraph to set.
     */
    public void setAktGraph(final ZeichFen aktGr) {
        this.aktGrph = aktGr;
    }

    /**
     * Selektiert das angegebene Graphfenster (macht es sichtbar, etc).
     *
     * @param graph  Das zu selektierende Graphfenster.
     */
    public void selGraph(final ZeichFen graph) {
        int i = 0;

        while (this.graphen.get(i) != graph) {
            i++;
        }

        this.waehleGraph(i);
        this.aktGrph.neuZeichnen();
    }

    /**
     * Gibt die kleinste noch nicht von einem der aktuellen Graphen verwendete
     * ID zur�ck.
     *
     * @return  Die kleinste noch nicht verwendete ID.
     */
    public int kleinsteFreieID() {
        int kleinste = 0;
        Iterator<ZeichFen> it = this.graphen.iterator();
        ZeichFen aktGr;
       
        while (it.hasNext()) {
            aktGr = (ZeichFen) it.next();
            if (kleinste <= aktGr.getId()) {
                kleinste = aktGr.getId() + 1;
            }
        }
       
        return kleinste;
    }

    /**
     * Zeichnet alle Vis-Fenster neu.
     */
    public void repaintAll() {
        Iterator<ZeichFen> it = this.graphen.iterator();
        while (it.hasNext()) {
            ((ZeichFen) it.next()).neuZeichnen();
        }
    }
   
    /**
     * Die Startmethode des Frames.
     *
     * @param args  Die Parameter f�r das Parameterobjekt. Sie werden direkt
     *              an die Klasse Parametersatz weitergegeben. Zur Formatierung
     *              der Parameter siehe diese Klasse sowie die Klasse
     *              Konstanten des Pakets statistik.
     */
    public static void main(final String[] args) {
        Parametersatz pr = new Parametersatz(args);
        pr.ergaenze();
          
        if (pr.getGraphisch().booleanValue()) {
            PfeilController steuer = new PfeilController(pr);
//            SonstMeth.log(SonstMeth.LOG_DEBUG, pr.toString(), pr, "plain");
            steuer.setVisible(true);
        }
    }
}
TOP

Related Classes of fmg.fmg8.pfeilGUI.PfeilController

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.