# Methode wird nicht ausgeführt



## waxweazle (9. Mrz 2005)

Erst mal der Quellcode:


```
/**
package game;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import game.Wuerfel;
import game.SpielerAnzahlDialog;

public class Spielfeld extends JPanel  implements MouseListener
{
....

  public JTextField msg;

....
 public Spielfeld()
  {
.....
    //Texte
    info = new JLabel("INFOs :");
    info.setFont(new Font("Comic Sans MS", Font.BOLD, 16));
    msg = new JTextField("Willkommen zu ... ! ");
    msg.setFont(new Font("Comic Sans MS", Font.BOLD, 14));
    msg.setEditable(false);

....    
     
     public void setText()
     {
       System.out.println("Test");
     }

     
     public void setMsg ()
     {
       msg.setText("Test!");
     }
  
.....

  public void hinzufügen()
  {
    //Text hinzufügen
    addZelle(m,1,2,1,3);
    addZelle(a,1,2,8,3);
    addZelle(d,1,2,1,7);
    addZelle(n,1,2,8,7);
    addZelle(info,1,3,0,11);
    addZelle(msg,1,9,1,12);
.....
```

Zweite Klasse: 


```
package game;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
import game.Spieler;
import game.Spielfeld;

public class SpielerAnzahlDialog extends JDialog implements ActionListener, ItemListener
{
....
 private Spielfeld sf;

  public SpielerAnzahlDialog(Frame owner, String titel)
  {

.....

  public void actionPerformed(ActionEvent ae)
  {
    Object object = ae.getSource();

    //Fenster wird wieder geschlossen
    if(object.equals(btnAbbrechen))
    {
      antwort = 0;
      sf.setText();
      sf.setMsg();
      setVisible(false);
      dispose();
    }

.....
```

Ich habe das Problem, das die setMsg() funktion nicht ausgeführt wird.... zumindest aktualisiert sich das Textfeld auf dem Bildschirm nicht. 
Die Funktion, die mit System.out.println... gibt den Inhalt aus. 
Innerhalb der Klasse, kann ich ohne Probleme das Textfeld mit Stings füttern, die auch sofort angezeigt werden, nur von einer anderen Klasse kann ich es nicht aufrufen!!!! 

Was habe ich übersehen???


----------



## Wildcard (9. Mrz 2005)

```
private Spielfeld sf;
 sf.setText();
```
und wo setzt du 'sf'?


----------



## waxweazle (9. Mrz 2005)

was  meinst DU damit, wo ich sf setze??? 

ich habe weiter unten in einer Klasse folgendes stehen, was wunderbar funktioniert 

```
public void mouseClicked(MouseEvent me)
  {
    if(me.getComponent() == anz)
    {
      int temp = 0;
      wuerfel.wuerfeln();
      temp = wuerfel.getAugenzahl();
      msg.setText("Sie haben eine: " + temp + " gewürfelt");
//      System.out.println("Sie haben eine: " + temp + " gewürfelt, würfel");
      refreshWürfel(temp);
...
```

also die beiden Klassen sind zusammen fast 800 Zeilen code.... 
aber ich kann sie gerne posten


----------



## mic_checker (9. Mrz 2005)

Vielleicht solltest du mal den kompletten Code posten, ansonsten weiss man nicht wo der Fehler liegt, man kann nur Vermutungen anstellen.

Poste zumindest noch den Konstruktor und die entsprechenden Methoden...


----------



## mic_checker (9. Mrz 2005)

waxweazle hat gesagt.:
			
		

> was  meinst DU damit, wo ich sf setze???


Du deklarierst es:


```
private Spielfeld sf;
```

Aber du initialisierst es noch nicht....


----------



## Wildcard (9. Mrz 2005)

waxweazle hat gesagt.:
			
		

> was meinst DU damit, wo ich sf setze???


Damit meine ICH das nach

```
private Spielfeld sf;
```
sf null ist.
[edit]2l8[/edit]


----------



## waxweazle (9. Mrz 2005)

Klasse Spielfeld 

```
/**
 * 

Title: Spielfeld</p>
 *
 * 

Beschreibung: </p>
 *
 * 

Copyright: Copyright (c) 2005</p>
 *
 * 

Organisation: Fachhochschule Frankfurt am Main</p>
 *
 * @author Christian Hoeboer & Sven Lissek & Stefan Wolf
 * @version 1.0
 */
package game;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import game.Wuerfel;
import game.SpielerAnzahlDialog;

public class Spielfeld extends JPanel  implements MouseListener
{
/**
* Konstruktor von Spielfeld initialisiert die 40 Felder des
* char Arrays mit 'n'
*/
  private char [] Spielplan = new char[40];

  // Variablen Deklaration
  private GridBagConstraints gbc;
  private GridBagLayout gbl;

  private Wuerfel wuerfel;

  public JTextField msg;
  private JLabel anz,m,a,d,n,rotstart,gelbstart,grünstart, blaustart,info;
  private JLabel[] normfeld, blaufeld, gelbfeld, grünfeld,rotfeld,blauhaus,rothaus,grünhaus
      ,gelbhaus,pfeil,stein;

/*
  private int punkte;
  private char Eigenschaft;
  private int art;
  public char Farbe[] = "wrgby".toCharArray(); // w= white; r=red; g=green; y = yellow; b=blue;
  private boolean Zustand = false; // true, wenn figur auf dem Feld steht
*/
  public Spielfeld()
  {
    gbc = new GridBagConstraints();
    gbl = new GridBagLayout();

    wuerfel = new Wuerfel();

    for(int i=0; i < 40; i++)
      {
          Spielplan[i]='n';
          // n steht für neutral
      }

// alle, für das Spielfeld relevanten Grafiken werden geladen
    //Würfelgrafiken
    anz = new JLabel(new ImageIcon("würfeln.gif"));
    anz.addMouseListener(this);

    //Pfeile
    pfeil = new JLabel[4];
    pfeil[0] = new JLabel(new ImageIcon("pfeil.gif"));
    pfeil[1] = new JLabel(new ImageIcon("pfeilo.gif"));
    pfeil[2] = new JLabel(new ImageIcon("pfeils.gif"));
    pfeil[3] = new JLabel(new ImageIcon("pfeilw.gif"));

    //Texte
    info = new JLabel("INFOs :");
    info.setFont(new Font("Comic Sans MS", Font.BOLD, 16));
    msg = new JTextField("Willkommen zu Mensch ärger Dich nicht ! ");
    msg.setFont(new Font("Comic Sans MS", Font.BOLD, 14));
    msg.setEditable(false);
    m = new JLabel("Mensch");
    m.setFont(new Font("Comic Sans MS", Font.BOLD, 24));
    a = new JLabel("ärger");
    a.setFont(new Font("Comic Sans MS", Font.BOLD, 24));
    d = new JLabel("Dich");
    d.setFont(new Font("Comic Sans MS", Font.BOLD, 24));
    n = new JLabel("nicht");
    n.setFont(new Font("Comic Sans MS", Font.BOLD, 24));

    //alle Steine
    stein = new JLabel[4];
    stein[0] = new JLabel(new ImageIcon("steinblau.gif"));
    stein[1] = new JLabel(new ImageIcon("steinrot.gif"));
    stein[2] = new JLabel(new ImageIcon("steingelb.gif"));
    stein[3] = new JLabel(new ImageIcon("steingruen.gif"));

    //alle Felder
//normfelder werden in einer For- schleife mit Grafik angebunden
         normfeld = new JLabel[36];
         for(int i=0; i<36; i++)
         {
           normfeld[i] = new JLabel(new ImageIcon("normfeld.gif"));
         }

//blaufelder werden mit Grafik angebunden
         blaustart = new JLabel(new ImageIcon("blaufeld.gif"));
         blaufeld = new JLabel[4];
         blauhaus = new JLabel[4];
         for(int i=0; i<4 ;i++)
         {
           blaufeld[i] = new JLabel(new ImageIcon("blaufeld.gif"));
         }
         blauhaus[0] = new JLabel(new ImageIcon("blau1.gif"));
         blauhaus[1] = new JLabel(new ImageIcon("blau2.gif"));
         blauhaus[2] = new JLabel(new ImageIcon("blau3.gif"));
         blauhaus[3] = new JLabel(new ImageIcon("blau4.gif"));

//rotfelder werden mit Grafik angebunden
         rotstart = new JLabel(new ImageIcon("rotfeld.gif"));
         rotfeld = new JLabel[4];
         rothaus = new JLabel[4];
         for(int i=0; i<4 ;i++)
         {
            rotfeld[i] = new JLabel(new ImageIcon("rotfeld.gif"));
         }
         rothaus[0] = new JLabel(new ImageIcon("rot1.gif"));
         rothaus[1] = new JLabel(new ImageIcon("rot2.gif"));
         rothaus[2] = new JLabel(new ImageIcon("rot3.gif"));
         rothaus[3] = new JLabel(new ImageIcon("rot4.gif"));


//gelbfelder werden mit Grafik angebunden
          gelbstart = new JLabel(new ImageIcon("gelbfeld.gif"));
          gelbfeld = new JLabel[4];
          gelbhaus = new JLabel[4];
          for(int i=0; i<4 ;i++)
          {
             gelbfeld[i] = new JLabel(new ImageIcon("gelbfeld.gif"));
          }
         gelbhaus[0] = new JLabel(new ImageIcon("gelb1.gif"));
         gelbhaus[1] = new JLabel(new ImageIcon("gelb2.gif"));
         gelbhaus[2] = new JLabel(new ImageIcon("gelb3.gif"));
         gelbhaus[3] = new JLabel(new ImageIcon("gelb4.gif"));


//grünfelder werden mit Grafik angebunden
          grünstart = new JLabel(new ImageIcon("grünfeld.gif"));
          grünfeld = new JLabel[4];
          grünhaus = new JLabel[4];
          for(int i=0; i<4 ;i++)
          {
             grünfeld[i] = new JLabel(new ImageIcon("grünfeld.gif"));
          }
          grünhaus[0] = new JLabel(new ImageIcon("grün1.gif"));
          grünhaus[1] = new JLabel(new ImageIcon("grün2.gif"));
          grünhaus[2] = new JLabel(new ImageIcon("grün3.gif"));
          grünhaus[3] = new JLabel(new ImageIcon("grün4.gif"));


    setBackground(Color.white);
    setLayout(gbl);
  }//end of Spielfeld

//------Logik--------------------------------------------------------------------

    public void setElementAt(char elem, int index)
    {
        Spielplan[index]=elem;
    }

    public char elementAt(int index)
    {
        return Spielplan[index];
    }

    public int getPosLast(char elem)
    {
        int pos = 0;
        for(int i=39; i>=0; i--)
        {
          if (Spielplan[i] == elem)
          {
            pos = i;
          }
          else
           pos = 1000;
        }
        return pos;
     }
     
     
     public void setText()
     {
       System.out.println("Test");
     }

     
     public void setMsg ()
     {
       msg.setText("Test!");
     }
     
/*
  setStein setzt für die Spieler, die bei neues Spiel starten, ausgewählt wurden,
  alle Spielsteine auf ihre entsprechende Position
*/
     public void setStein (int nr)
     {
        if(nr == 0)
        {
         for(int i=0; i<4; i++)
         {
           blaufeld[i].setIcon(new ImageIcon("steinblau.gif"));
         }
        }

       if(nr == 1)
      {
        for(int i=0; i<4; i++)
        {
          rotfeld[i].setIcon(new ImageIcon("steinrot.gif"));
        }
      }

      if(nr == 2)
      {
        for(int i=0; i<4; i++)
        {
          gelbfeld[i].setIcon(new ImageIcon("steingelb.gif"));
        }
       }

      if(nr == 3)
      {
        for(int i=0; i<4; i++)
        {
          grünfeld[i].setIcon(new ImageIcon("steingruen.gif"));
        }
      }
     }//end of setStein

//Diese Funktion ändert die angezeigte Würfelgrafik, entsprechend der gewürfelten Zahl
  public void refreshWürfel (int augen)
  {
    switch(augen)
    {
        case 0: anz.setIcon(new ImageIcon("würfeln.gif"));
          break;
        case 1: anz.setIcon(new ImageIcon("eins.gif"));
          break;
        case 2: anz.setIcon(new ImageIcon("zwei.gif"));
          break;
        case 3: anz.setIcon(new ImageIcon("drei.gif"));
          break;
        case 4: anz.setIcon(new ImageIcon("vier.gif"));
          break;
        case 5: anz.setIcon(new ImageIcon("fünf.gif"));
          break;
        case 6: anz.setIcon(new ImageIcon("sechs.gif"));
          break;
    }
    for(int i=0; i<4; i++)
       {
         blaufeld[i].setIcon(new ImageIcon("steinblau.gif"));
       }

   //  System.out.println("Anz: " + anz);
  }

  public void addZelle(Component komp,int hoehe, int breite, int xpos, int ypos)
 {
     gbc.fill = GridBagConstraints.NONE;
     gbc.gridwidth = breite;
     gbc.gridheight = hoehe;
     gbc.gridx = xpos;
     gbc.gridy = ypos;
     gbl.setConstraints(komp,gbc);
     add(komp);
 }

  public void hinzufügen()
  {
    //Text hinzufügen
    addZelle(m,1,2,1,3);
    addZelle(a,1,2,8,3);
    addZelle(d,1,2,1,7);
    addZelle(n,1,2,8,7);
    addZelle(info,1,3,0,11);
    addZelle(msg,1,9,1,12);

    //Würfel hinzufühgen
    addZelle(anz,2,2,7,1);

    //Pfeile hinzufügen
    addZelle(pfeil[0],1,1,3,10);
    addZelle(pfeil[1],1,1,0,3);
    addZelle(pfeil[2],1,1,7,0);
    addZelle(pfeil[3],1,1,10,7);

    //alle Startpunkte von blau
    addZelle(blaufeld[0],1,1,0,0);
    addZelle(blaufeld[1],1,1,1,0);
    addZelle(blaufeld[2],1,1,0,1);
    addZelle(blaufeld[3],1,1,1,1);
    //alle Häuschen von blau
    addZelle(blauhaus[0],1,1,1,5);
    addZelle(blauhaus[1],1,1,2,5);
    addZelle(blauhaus[2],1,1,3,5);
    addZelle(blauhaus[3],1,1,4,5);

    //alle Startpunkte von rot
    addZelle(rotfeld[0],1,1,9,0);
    addZelle(rotfeld[1],1,1,10,0);
    addZelle(rotfeld[2],1,1,9,1);
    addZelle(rotfeld[3],1,1,10,1);
    //alle Häuschen von rot
    addZelle(rothaus[0],1,1,5,1);
    addZelle(rothaus[1],1,1,5,2);
    addZelle(rothaus[2],1,1,5,3);
    addZelle(rothaus[3],1,1,5,4);

    //alle Startpunkte von gelb
    addZelle(gelbfeld[0],1,1,9,9);
    addZelle(gelbfeld[1],1,1,10,9);
    addZelle(gelbfeld[2],1,1,9,10);
    addZelle(gelbfeld[3],1,1,10,10);
    //alle Startpunkte von gelb
    addZelle(gelbhaus[0],1,1,9,5);
    addZelle(gelbhaus[1],1,1,8,5);
    addZelle(gelbhaus[2],1,1,7,5);
    addZelle(gelbhaus[3],1,1,6,5);


    //alle Startpunkte von grün
    addZelle(grünfeld[0],1,1,0,10);
    addZelle(grünfeld[1],1,1,0,9);
    addZelle(grünfeld[2],1,1,1,10);
    addZelle(grünfeld[3],1,1,1,9);
    //alle Startpunkte von grün
    addZelle(grünhaus[0],1,1,5,9);
    addZelle(grünhaus[1],1,1,5,8);
    addZelle(grünhaus[2],1,1,5,7);
    addZelle(grünhaus[3],1,1,5,6);


    //alle Spielfelder hinzufügen
    addZelle(normfeld[0],1,1,4,0);
    addZelle(normfeld[1],1,1,5,0);
    addZelle(rotstart,1,1,6,0);
    addZelle(normfeld[2],1,1,6,1);
    addZelle(normfeld[3],1,1,6,2);
    addZelle(normfeld[4],1,1,6,3);
    addZelle(normfeld[5],1,1,6,4);
    addZelle(normfeld[6],1,1,7,4);
    addZelle(normfeld[7],1,1,8,4);
    addZelle(normfeld[8],1,1,9,4);
    addZelle(normfeld[9],1,1,10,4);
    addZelle(normfeld[10],1,1,10,5);
    addZelle(gelbstart,1,1,10,6);
    addZelle(normfeld[11],1,1,9,6);
    addZelle(normfeld[12],1,1,8,6);
    addZelle(normfeld[13],1,1,7,6);
    addZelle(normfeld[14],1,1,6,6);
    addZelle(normfeld[15],1,1,6,7);
    addZelle(normfeld[16],1,1,6,8);
    addZelle(normfeld[17],1,1,6,9);
    addZelle(normfeld[18],1,1,6,10);
    addZelle(normfeld[19],1,1,5,10);
    addZelle(grünstart,1,1,4,10);
    addZelle(normfeld[20],1,1,4,9);
    addZelle(normfeld[21],1,1,4,8);
    addZelle(normfeld[22],1,1,4,7);
    addZelle(normfeld[23],1,1,4,6);
    addZelle(normfeld[24],1,1,3,6);
    addZelle(normfeld[25],1,1,2,6);
    addZelle(normfeld[26],1,1,1,6);
    addZelle(normfeld[27],1,1,0,6);
    addZelle(normfeld[28],1,1,0,5);
    addZelle(blaustart,1,1,0,4);
    addZelle(normfeld[29],1,1,1,4);
    addZelle(normfeld[30],1,1,2,4);
    addZelle(normfeld[31],1,1,3,4);
    addZelle(normfeld[32],1,1,4,4);
    addZelle(normfeld[33],1,1,4,3);
    addZelle(normfeld[34],1,1,4,2);
    addZelle(normfeld[35],1,1,4,1);
  }
/*
  Wenn im Spielfeld, der Mauszeiger über den Würfel bewegt wird, verändert sich
 der Zeige in eine Hand, wenn er wieder außerhalb des Würfels ist, wird er wieder zum
 Zeiger
*/
  public void mouseEntered(MouseEvent me)
  {
    me.getComponent().setCursor(new Cursor(Cursor.HAND_CURSOR));
  }
  public void mouseExited(MouseEvent me)
  {
    me.getComponent().setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
  }
/*
  Wenn man auf den Würfel klickt, wird über die Würfelklasse eine Random zahl an
 die Funktion zurückgegeben. Im Massage Feld im unterem Teil des Fensters, wird erst
 eine Meldung über die gewürfelte Zahl angezeigt. Danach wird die Würfelgrafik refreshed
 und das Massage Feld wird nach 3 Sekunden geändert.
*/
  public void mouseClicked(MouseEvent me)
  {
    if(me.getComponent() == anz)
    {
      int temp = 0;
      wuerfel.wuerfeln();
      temp = wuerfel.getAugenzahl();
      msg.setText("Sie haben eine: " + temp + " gewürfelt");
//      System.out.println("Sie haben eine: " + temp + " gewürfelt, würfel");
      refreshWürfel(temp);

      //msg.setText("Wählen sie nun eine Figur aus, die sie ziehen möchte !");
    }
  }
  public void mousePressed(MouseEvent me)
  {
  }
  public void mouseReleased(MouseEvent me)
  {
  }

}//end of class
```

Klasse SpielerAnzahlDialog

```
package game;

/**
 * 

Title: SpielerAnzahlDialog </p>
 *
 * 

Description: Implementiert einen "natürlichen" Würfel, der die Zahlen von
 * 1-6 Würfelt </p>
 *
 * 

Copyright: Copyright (c) 2005</p>
 *
 * 

Company: Fachhochschule Frankfurt am Main</p>
 *
 * @author Christian Hoeboer & Sven Lissek & Stefan Wolf
 * @version 1.0
 */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
import game.Spieler;
import game.Spielfeld;


/*
* Dialogfenster um beim Spielstart, den einzelnen Spielern Name und Farben zuzuweisen
* und um auszuwählen, ob der Spieler Mensch oder Computer sein soll
*/
public class SpielerAnzahlDialog extends JDialog implements ActionListener, ItemListener
{
  private GridBagLayout gbl;
  private GridBagConstraints gbc;
  private JPanel pan;

  private JCheckBox[] checkb;
  private JLabel[] farbe;
  private JTextField[] tf;
  private JComboBox[] combob;

  private JLabel lbl1,lbl2;
  private JButton btnStarten, btnAbbrechen;
  private int antwort = 0;

  private Spieler Spieler1,Spieler2,Spieler3,Spieler4;
  private Spielfeld sf;


// Layout, des Spieler-Auswahlfensters
  public SpielerAnzahlDialog(Frame owner, String titel)
  {
    super(owner, titel, true);
    gbl = new GridBagLayout();
    getContentPane().setLayout(gbl);
    pan = new JPanel(new GridBagLayout());
    setLocationRelativeTo(null);

    checkb = new JCheckBox[4];
    farbe = new JLabel[4];
    tf = new JTextField[4];
    combob = new JComboBox[4];

/*
* Größe des Fensters wird festgelegt, es wird mittig zum Bildschirm ausgerichtet
* und die Anderung der Größe wird ausgeschalten
*/
    this.setSize(275,200);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    this.setLocation( (d.width - this.getWidth()) / 2,
                     (d.height - this.getHeight()) / 2);
    this.setResizable(false);

    sf = new Spielfeld();

    farbe[0] = new JLabel("blau", JLabel.RIGHT);
    farbe[1] = new JLabel("rot", JLabel.RIGHT);
    farbe[2] = new JLabel("gelb", JLabel.RIGHT);
    farbe[3] = new JLabel("grün", JLabel.RIGHT);

//Textzeile wird eingefügt
    lbl1 = new JLabel("Boxen für Spielerauswahl aktivieren");
    gbc = neueZelle(1,4,0,0,0,0);
    gbc.insets =new Insets(5,1,1,1);
    this.getContentPane().add(lbl1, gbc);
/*
* Da wir mit max 4 Spielern spielen, wird die Anordnung der Auswahlfelder
* in einer Schleife realisiert.
* Es wird zuerst jedes Erforderliche Element initialisiert.
* Dannach wird mit der Funktion neueZelle, genau diese mit Ihren Eigenschaften erschaffen
* und nun kann man das erzeugte Element hinzufügen
* Dies geschieht 4 mal
*/
    for(int i=0; i<4; i++)
    {
      checkb[i] = new JCheckBox();
      checkb[i].addItemListener(this);     //zum Abfangen von Ereignissen wir der IL angebunden
      checkb[i].setSelected(false);        //alle Boxen werden default auf disable gesetzt
      gbc = neueZelle(1,1,0,i+1,0,0);
      this.getContentPane().add(checkb[i], gbc);

      gbc = neueZelle(1,1,1,i+1,0,0);
      this.getContentPane().add(farbe[i], gbc);   //Farbenlabels werden implementiert

      tf[i] = new JTextField("Spieler" + (i+1));  //default Spielername ist Spieler 1 , 2 etc
      tf[i].setEditable(false);                   //solange der checkboxbutton nicht aktiviert ist, kann man den Namen nicht ändern
      gbc = neueZelle(1,1,2,i+1,0,0);
      this.getContentPane().add(tf[i], gbc);

      combob[i] = new JComboBox(new String[] {"Mensch","Computer"});   //erstellt Combobox zur Auswahl des Spielertyps
      //combob[i].addActionListener(this);
      combob[i].setEnabled(false);                                     //solange der checkboxbutton nicht aktiviert ist,
                                                                       //kann man den Typ nicht ändern
                                                                       //editierbarkeit ist ausgeschalten
      gbc = neueZelle(1,1,3,i+1,0,0);
      this.getContentPane().add(combob[i], gbc);
    }

//Leerzeile wird eingefügt
    lbl2 = new JLabel("");
    gbc = neueZelle(1,4,0,5,0,0);
    gbc.insets =new Insets(5,5,5,5);
    this.getContentPane().add(lbl2, gbc);

/*
* nun werden noch 2 Button, Starten und Beenden in das Dialogfenster implementiert
*/
    btnStarten = new JButton("Starten");
    btnStarten.addActionListener(this);
    gbc = neueZelle(1,1,2,6,0,0);
    this.getContentPane().add(btnStarten, gbc);

    btnAbbrechen = new JButton("Abbrechen");
    btnAbbrechen.addActionListener(this);
    gbc = neueZelle(1,1,3,6,0,0);
    this.getContentPane().add(btnAbbrechen, gbc);


  }//end of SpielerAnzahlDialog


// ----- Logik des SpielerAnzahlDialogd Fenster--------------------------------
  public void actionPerformed(ActionEvent ae)
  {
    Object object = ae.getSource();

    //Fenster wird wieder geschlossen
    if(object.equals(btnAbbrechen))
    {
      antwort = 0;
      sf.setText();
      sf.setMsg();
      setVisible(false);
      dispose();
    }


    if(object.equals(btnStarten))
    {
//prüft wieviele Spieler teilnehmen
        int SpielerAnz = 0;
        for(int i=0 ; i<4; i++)
        {
            if(checkb[i].isSelected()== true)
            SpielerAnz ++;
        }
/*
*wenn mindestens 2 Spieler teilnehmen, wird überprüft, ob es sich um Computerspieler oder Menschliche
*handelt und die entsprechenden Werte werden übergeben. Dann startet das Spiel
*/
        if (SpielerAnz > 1)
       {
          if(checkb[0].isSelected())
          {
             if("Mensch".equals(combob[0].getSelectedItem()))
             {
               String temp= new String("");
               temp = tf[0].getText();
         //      Spieler1 = new Spieler(temp,true,false,0);
               sf.setStein(0);
             }
 /*            if("Computer".equals(combob[0].getSelectedItem()))
             {
             }
*/          }


         if(checkb[1].isSelected())
         {
            if("Mensch".equals(combob[1].getSelectedItem()))
            {
              String temp= new String("");
              temp = tf[1].getText();
           //   Spieler2 = new Spieler(temp,true,false,10);
              sf.setStein(1);
            }
/*            if("Computer".equals(combob[0].getSelectedItem()))
            {
            }
*/          }

         if(checkb[2].isSelected())
         {
            if("Mensch".equals(combob[2].getSelectedItem()))
            {
              String temp= new String("");
              temp = ("Willkommen Spieler " +tf[2].getText());
              System.out.println(temp);
              sf.setMsg();
           //   Spieler3 = new Spieler(temp,true,false,20);
              sf.setStein(2);
            }
      /*   if("Computer".equals(combob[2].getSelectedItem()))
           {
           }
    */    }

         if(checkb[3].isSelected())
         {
           if("Mensch".equals(combob[3].getSelectedItem()))
            {
              String temp= new String("");
              temp = tf[3].getText();
           //   Spieler4 = new Spieler(temp,true,false,30);
              sf.setStein(3);
             }
      /*      if("Computer".equals(combob[3].getSelectedItem()))
            {

            }
        */ }
// Neues Spiel Fenster wird geschlossen
         setVisible(false);
         dispose();

        }

// wenn weniger als 2 Spieler ausgewählt sind erscheint eine Fehlermeldung
        else
        {
            JOptionPane.showMessageDialog(this,
               "Sie müssen mindestens zwei Spieler auswählen, um anfangen zu können!",
               "Fehler",JOptionPane.ERROR_MESSAGE);
        }
    }
}
  
  public int getAntwort()
  {
    return antwort;
  }

/*
* Wenn der Benutzer einer der Checkboxen aktiviert, kann er den Namen des Spielers und dessen Typ auswählen
* Wenn die Checkbox deaktiviert wird, werden auch die entsprechenden Namen und Typfelder wieder deaktiviert
*/
  public void itemStateChanged(ItemEvent ie)
  {
      for(int i=0; i<4; i++)
      {
        if (checkb[i] == ie.getItemSelectable())
        {
          tf[i].setEditable(!tf[i].isEditable());
          combob[i].setEnabled(!combob[i].isEnabled());
          i = 4;
        }
      }

      boolean enabled = false;
      for(int j=0; j<4; j++)
      {
         if (combob[j].isEnabled() && "Computer".equals( (String) combob[j].getSelectedItem()))
         {
            enabled = true;
         }
      }
   }


  //---- GridBagLayout aufbau ---------------------------------------------------

  private GridBagConstraints neueZelle(int hoehe, int breite, int xpos, int ypos, double x_ausd, double y_ausd)
  {
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.insets =new Insets(1,1,1,1);
    gbc.fill = GridBagConstraints.BOTH;
    gbc.gridwidth = breite;
    gbc.gridheight = hoehe;
    gbc.gridx = xpos;
    gbc.gridy = ypos;
    gbc.weightx = x_ausd;
    gbc.weighty = y_ausd;
    return gbc;
  }

}
```
[/code]


----------



## Wildcard (9. Mrz 2005)

Und das Spielfeld ist das selbe? Soll heißen wird nur in dieser Klasse instanziert?


----------



## waxweazle (9. Mrz 2005)

also Spielfeld selbst wird von Spielmenü aufgerufen 


```
/**
 * 

Title: SpielMenu</p>
 *
 * 

Beschreibung: </p>
 *
 * 

Copyright: Copyright (c) 2005</p>
 *
 * 

Organisation: Fachhochschule Frankfurt am Main</p>
 *
 * @author Christian Hoeboer & Sven Lissek & Stefan Wolf
 * @version 1.0
 */
package maedn;
import java.awt.Image;
import java.awt.event.*;
import java.io.File;
import java.awt.*;

import javax.swing.*;

import game.Spielfeld;
import game.SpielerAnzahlDialog;
import GUI.StatistikFensterDialog;

public class SpielMenu extends JFrame implements ActionListener, ItemListener
{
  private JMenu jMnu1, jMnu2, jMnu3;
  private JMenuBar jMnuB;
 
  private Spielfeld spielfeld;
  private Image image;

  public SpielMenu() {

    spielfeld = new Spielfeld();

    this.setTitle("Mensch ärgere Dich nicht");

    setJMenuBar(erstelleMenu());
    spielfeld.hinzufügen();
    this.getContentPane().add(spielfeld);

    this.setSize(new Dimension(650, 680));
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    this.setLocation( (d.width - this.getWidth()) / 2,
                     (d.height - this.getHeight()) / 2);
    this.setResizable(false);



//------------------------------------------------------------------------------

    this.addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent we)
      {
        System.exit(0);
      }
    });

  } // end of SpielMenu()

  public void itemStateChanged(ItemEvent e)
  {
  }

//---Menü wird erzeugt----------------------------------------------------------

  private JMenuBar erstelleMenu()
  {
    //Menüleiste Erstellen
    jMnuB = new JMenuBar();

    // Memüpunkt Datei
    jMnu1 = new JMenu("Datei");
    jMnuB.add(jMnu1);

    //"Neues Spiel"
    JMenuItem jmnuItem1 = new JMenuItem("Neues Spiel");
    jmnuItem1.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_MASK));
    jmnuItem1.addActionListener(this);
    jMnu1.add(jmnuItem1);

    //Trennlinie
    jMnu1.addSeparator();

    //"Spiel laden"
    JMenuItem jmnuItem2 = new JMenuItem("Spiel laden");
    jmnuItem2.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_MASK));
    jmnuItem2.addActionListener(this);
    jMnu1.add(jmnuItem2);

    //"Spiel speichern"
    JMenuItem jmnuItem3 = new JMenuItem("Spiel speichern");
    jmnuItem3.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_MASK));
    jmnuItem3.addActionListener(this);
    jMnu1.add(jmnuItem3);

    //Trennlinie
    jMnu1.addSeparator();

    //"Beenden"
    JMenuItem jmnuItem4 = new JMenuItem("Beenden");
    jmnuItem4.addActionListener(this);
    jMnu1.add(jmnuItem4);

    //Menüpunkt Statistik
    jMnu2 = new JMenu("Statistiken");
    jMnuB.add(jMnu2);

    //"Gewonnene Spiele"
    JMenuItem jmnuItem5 = new JMenuItem("Gewonnene Spiele");
    jmnuItem5.setAccelerator(KeyStroke.getKeyStroke('G', InputEvent.CTRL_MASK));
    jmnuItem5.addActionListener(this);
    jMnu2.add(jmnuItem5);

    //Menüpunkt Hilfe
    jMnu3 = new JMenu("Hilfe");
    jMnuB.add(jMnu3);

    //"Info"
    JMenuItem jmnuItem6 = new JMenuItem("Info");
    jmnuItem6.setAccelerator(KeyStroke.getKeyStroke('I', InputEvent.CTRL_MASK));
    jmnuItem6.addActionListener(this);
    jMnu3.add(jmnuItem6);

    return jMnuB;
  }

  /**
   * actionPerformed
   * Hier werden alle Menüpunkte mit entsprechenden Fenstern zur Auswahl verknüpft
   * @param e ActionEvent
   */
// ----- Logik Funktionen -----------------------------------------------------
  public void actionPerformed(ActionEvent ae)
  {
      if (ae.getSource() instanceof JMenuItem)
      {
          //wenn im Menüunterpunkt neues Spiel angeklickt wurde, öffnet sich Abfragebox
          if (ae.getActionCommand().equals("Neues Spiel"))
          {
             SpielerAnzahlDialog dlg = new SpielerAnzahlDialog(this,
             "Spieleranzahl und Farben wählen");
             dlg.setVisible(true);
          }

          //wenn im Menüunterpunkt Spiel laden angeklickt wurde, öffnet sich FileDialog
          if (ae.getActionCommand().equals("Spiel laden"))
          {
       /*       FileDialog dlg = new FileDialog(this, "Datei öffnen", FileDialog.LOAD);
              dlg.show();
              lbl.setText("Datei " + dlg.getDirectory() + dlg.getFile() +
                    " ausgewählt");
         */ }

          //wenn im Menüunterpunkt Spiel speichern angeklickt wurde, öffnet sich FileDialog
          if (ae.getActionCommand().equals("Spiel speichern"))
          {
       /*      FileDialog dlg = new FileDialog(this, "Datei speichern unter",
                                        FileDialog.SAVE);
             dlg.show();
             lbl.setText("speichen unter " + dlg.getDirectory() + dlg.getFile());
       */   }

          //wenn im Menüunterpunkt Beenden angeklickt wurde, öffnet sich Abfragefenster
          if (ae.getActionCommand().equals("Beenden"))
          {
               int i = JOptionPane.showConfirmDialog(this,
                                              "Anwendung wirklich beenden?",
                                              "Beenden?",
                                              JOptionPane.YES_NO_OPTION,
                                              JOptionPane.QUESTION_MESSAGE);
               if (i == JOptionPane.YES_OPTION)
               {
               System.exit(0);
               }
          }

      //-----Statistik------------------------------------------------------------------
         if (ae.getActionCommand().equals("Gewonnene Spiele"))
         {
             StatistikFensterDialog dlg = new StatistikFensterDialog(this,
            "Statistik Infos");
            dlg.setVisible(true);

          }

      //-----Info------------------------------------------------------------------

      //wenn im Menüunterpunkt Info angeklickt wurde, öffnet sich Infofenster
         if (ae.getActionCommand().equals("Info"))
        {
             JOptionPane.showMessageDialog(this,
            "Dies ist ein \"Mensch ärgere Dich nicht\" Spiel! " +
                                      "\n\n" + "Version: 0.1 (Alpha Stadium)" +
                                      "\n\n" +
                                      "created by: Sven Lissek, Christian Hoeboer & Stefan Wolf",
                                      "Info", JOptionPane.INFORMATION_MESSAGE);
         }
    }
  } //end of actionEvents
}
```

aber hier wird nichts an der Spielfeldklasse verändert.... 
ich probiere schon seit mehreren Stunden den Fehler zu finden, ohne Erfolg.... 
wie gesagt, die Entwicklungsumgebung zeigt keine Fehler an, kompiliert wird ohne Fehlermeldung, in der Klasse selber werden alle veränderungen sofort aktualisiert, nur kann ich von SpielerAnzahlDialog keine Grafikveränderung am Spielfeld anstoßen, warum auch immer.


----------



## Wildcard (9. Mrz 2005)

Jetzt vestehst du vieleicht meine erste Frage!
Das eine Spielfeld hat nichts mehr mit dem anderen zu tun. Es ist ein neues Objekt.
Wenn du das erste Spielfeld verändern willst brauchst du eine Referenc darauf.


----------



## waxweazle (9. Mrz 2005)

ok jetzt mal für Noobs, wie mache ich das???

Habe meine komplette Kreativdenkphase ins Fehlersuchen gesteckt und bin total ausgelaugt.


----------



## Wildcard (9. Mrz 2005)

Die 2 einfachsten Möglichkeiten währen dem wie heisst das noch, scrollscroll, dem SpielerAnzahlDialog im Konstruktor eine Referenz auf das Spielfeld mitgibst, oder in dem du das Spielfeld (wenn es definitiv nur eins geben darf) zum Singelton machst. 
Die erste Methode ist nicht schön, aber IMO das kleiner Übel.
Wenn du's schön machen willst Klassenstruktur überdenken und dir in den FAQ den Beitrag von DBAC über DesignPatterns durchlesen.


----------



## waxweazle (9. Mrz 2005)

Leider haben wir von der ersten Methode noch nie was gehört, kannst du evtl. mal ein paar zeilen code zur verdeutlichung schreiben?


----------



## Wildcard (9. Mrz 2005)

Wenn SpielerAnzahlDialog erstellt wird das Spielfeld mitgeben:

```
SpielerAnzahlDialog dialog = new SpielerAnzahlDialog(spielfeld);
```
In SpielerAnzahlDialog ein entsprechender Konstruktor:

```
public class SpielerAnzahlDialog
{

    private Spielfeld sf;
    
    public SpielerAnzahlDialog(Spielfeld sf)
    {
        this.sf=sf;
    }
}
```


----------



## waxweazle (9. Mrz 2005)

@Wildcard

Du bist ein Schatz, es funktioniert .... 1000 x dank an Dich!!!!


----------



## Wildcard (9. Mrz 2005)

waxweazle hat gesagt.:
			
		

> Du bist ein Schatz, es funktioniert .... 1000 x dank an Dich!!!!


Nette Formulierung! Hoffe mal du bist kein Mann...    :?
 :wink:


----------

