# numberfield einfärben



## xcaver (8. Jan 2013)

tachschien =D
also mein problen ist ich möchte ein numberfield einferben jedoch immer in unterschiedlichen farben.
ich habe eine zufalszahl die generiert wird und nach der, jenachdem was halt raus kommt, mein numberfield immer eine andere faben haben soll ...
Ich arbeite mit drei klassen ....
Klasse eins in dem meine zufalls methode ist und noch ein par andere sachen die hier aber nicht weiter einfluss haben:

```
public static int Zufall() {
    int A ;
    A=(int)(Math.random()*4+1);                                                                
    return A;
  }
```

meine klasse welche dann die zufals zahl in eine farbe umwanderln soll:

```
public class Farben extends Spiel{
  
  // Anfang Attribute
  private boolean Gelb;
  private boolean Rot;
  private boolean Gruen;
  private boolean Blau;
  public  static int farbe1;
  
  public static boolean[] farbefinden = new boolean [4] ;
  
  
  // Ende Attribute
  
  // Anfang Methoden
  public static boolean[] farbefinden(){
    Farben A1 = new Farben ();  
    
    farbe1 = übergang;
    if (farbe1 == 1) {
      
      A1.setRot(true);
      A1.setGelb(false);
      A1.setGruen(false);
      A1.setBlau(false);
    }
    else if (farbe1 ==2) {
      A1.setRot(false);
      A1.setGelb(false);
      A1.setGruen(true) ;
      A1.setBlau(false);
    } 
    else if (farbe1 ==3) {
      A1.setRot(false);
      A1.setGelb(true);
      A1.setGruen(false);
      A1.setBlau(false);
    }  
    else if (farbe1 ==4) {
      A1.setRot(false);
      A1.setGruen(false);
      A1.setGelb(false);
      A1.setBlau(true);
    } // end of if-else
    farbefinden[0] =A1.getRot()  ;
    farbefinden[1]=A1.getGelb();
    farbefinden[2]=A1.getGruen();
    farbefinden[3]=A1.getBlau();
    return farbefinden;  
  }
  
  public boolean getGelb() {
    return Gelb;
  }
  
  
  public void setGelb(boolean Gelb) {
    this.Gelb = Gelb;
  }
  
  
  public boolean getRot() {
    return Rot;
  }
  
  
  public void setRot(boolean Rot) {
    this.Rot = Rot;
  }
  
  
  public boolean getGruen() {
    return Gruen;
  }
  
  
  public void setGruen(boolean Gruen) {
    this.Gruen = Gruen;
  }
  
  
  public boolean getBlau() {
    return Blau;
  }
  
  
  public void setBlau(boolean Blau) {
    this.Blau = Blau;
  }
}
```

sowie die klasse die alles ausführt und über die alles läuft :


```
public class Spiel extends Applet {
  // Anfang Attribute
  private Button ziehen = new Button();
  private Button neustart = new Button();
  public static NumberField nf1 = new NumberField();
  public static NumberField nf2 = new NumberField();
  public static NumberField nf3 = new NumberField();
  public static NumberField nfeinsatz = new NumberField();
  public static Label lakonto = new Label();
  public static TextArea ta = new TextArea("", 1, 1, TextArea.SCROLLBARS_BOTH);
  public static TextField tfaut = new TextField();
  double MeinKonto;
  double MeinEinsatz;
  public int wert1;
  public int wert2;
  public int wert3; 
  public static int übergang;  
  Bandit MeinBandit = new Bandit();
  boolean[]Slotfarben = {false,false,false,false};
  private Label label1 = new Label();
  private Label label2 = new Label();
  
  // Ende Attribute
 
  public void init() {
    Panel cp = new Panel(null);
    cp.setBounds(0, 0, 381, 550);
    add(cp);
    // Anfang Komponenten

   //..... 
    
    // Ende Komponenten
    
  } // end of init
  
  // Anfang Methoden
  public void ziehen_ActionPerformed(ActionEvent evt) {
    MeinEinsatz = nfeinsatz.getDouble();
    
    MeinKonto = Double.parseDouble(lakonto.getText());
    if (MeinEinsatz > MeinKonto) {
      Bandit.einsatz();
      
    }
    else {
      // end of if
      if (Bandit.buchen() < 0) {
        Spiel.ta.append("\n Zuwenig Guthaben ! \n"); 
        Spiel.tfaut.setText(" Zuwenig Guthaben ! \n");
      } else {
        lakonto.setText(String.valueOf(MeinBandit.buchen()));
        wert1 = Bandit.Zufall();
        wert2 = Bandit.Zufall();
        wert3 = Bandit.Zufall();
        nf1.setText(String.valueOf(wert1)); 
        nf2.setText(String.valueOf(wert2)); 
        nf3.setText(String.valueOf(wert3));
        Bandit.gewinn();
        
        wert1=übergang; 
        Farben MeineFarbe = new Farben ();
        MeineFarbe.setGelb(Slotfarben[1]);
        MeineFarbe.setRot(Slotfarben[0]);
        MeineFarbe.setBlau(Slotfarben[3]);
        MeineFarbe.setGruen(Slotfarben[2]);
        Slotfarben=MeineFarbe.farbefinden();
        
        nf1.setText(String.valueOf(Farben.farbefinden())); 
        wert2=übergang;
        nf2.setText(String.valueOf(Farben.farbefinden())); 
        wert3=übergang;
        nf3.setText(String.valueOf(Farben.farbefinden())); 
        
        
        
      }
      Bandit.Pleite();
    }
    
  } // end of ziehen_ActionPerformed
  
  //....
  
} // end of class plubb
```

Mein Problem nun:
das Programm starten und läuft auch soweit nur in den numberfiels sind weder dein eigentlichen zahlen noch irgendwelche farben enthalten 
sondern immer nur so ein code ... :
[Z@2e56553e

ich schetze mal das das was mein methode welche die zahl in eine farbe umwandeln das das was die ausgibt nicht im richtigen datentyp oder so etwas ist ... das ist jetzt nur eine vermutung ...
erbitte um hilfe 
xcaver


----------



## xcaver (8. Jan 2013)

ansich möchte ich einfach nur diesen teil vom code, welchen ich jetzt gerade direkt in den butten der klasse geschrieben habe die alles ausführt, vereinfacht in eine methode der klasse Farben haben ... was ich aber  leider nicht hinbekomme ... =(
wenn ich den code jetzt direkt in den butten schreibe funktioniert mein programm auch mit dem färben so wie ich möchte ... nur das geht doch bestimmt auch mit weniger text und ein par schleifen oder ??


```
if (wert1 ==1) {
          nf1.setBackground(Color.blue) ;
        } // e of if
        if (wert1==2) {
          nf1.setBackground(Color.yellow) ;
        } // end of if
        if (wert1==3) {
          nf1.setBackground(Color.red)   ;
        } // end of if
        if (wert1==4) {
          nf1.setBackground(Color.green)  ;
        } // end of if
        
        if (wert2 ==1) {
          nf2.setBackground(Color.blue) ;
        } // e of if
        if (wert2==2) {
          nf2.setBackground(Color.yellow) ;
        } // end of if
        if (wert2==3) {
          nf2.setBackground(Color.red)   ;
        } // end of if
        if (wert2==4) {
          nf2.setBackground(Color.green)  ;
        } // end of if
        
        if (wert3 ==1) {
          nf3.setBackground(Color.blue) ;
        } // e of if
        if (wert1==2) {
          nf3.setBackground(Color.yellow) ;
        } // end of if
        if (wert3==3) {
          nf3.setBackground(Color.red)   ;
        } // end of if
        if (wert3==4) {
          nf3.setBackground(Color.green)  ;
        } // end of if
```

xcaver


----------



## SlaterB (9. Jan 2013)

SlaterB hat gesagt.:


> nimm diesen Trugschluss sehr wichtig, denke noch lange daran und begehe möglichst nie wieder diesen Fehler, der zur schwersten Kategorie gehört,
> das Denken ganz vernebelt
> 
> hatte ja auch schon in
> ...


habe ich im letzten Thema zu 'extends Spiel' geschrieben, und was darf man hier dann lesen?
> public class Farben extends Spiel{

na klasse..

wobei hier anscheinend belanglos, du verwendest in Farben nichts von Spiel,
außer vielleicht die statische Variable übergang, 
wie du wenigstens statische Variablen auf normalen Wege ansprechen kannst war doch schon geklärt..

-----

reichlich sinnlosen bis schlimmen Kram gibt es auch weiterhin:
> Farben A1 = new Farben ();  
> Bandit MeinBandit = new Bandit()
> Farben MeineFarbe = new Farben ();

nie nie nie beginne eine normale Variable mit einem Großbuchstaben, das ist auch sehr sehr wichtig zu beachten,
du postest keinen Java-Code den jeder lesen kann sondern Geheimsprache, die erst mühsam zu entziffern ist


```
Farben MeineFarbe = new Farben ();
        MeineFarbe.setGelb(Slotfarben[1]);
        MeineFarbe.setRot(Slotfarben[0]);
        MeineFarbe.setBlau(Slotfarben[3]);
        MeineFarbe.setGruen(Slotfarben[2]);
        Slotfarben=MeineFarbe.farbefinden();
```
farbefinden() ist im Moment eine statische Methode, sie an einem bestimmten Objekt statt direkt an einer Klasse aufzurufen
ist einfach nur falsch und in die Irre führend

welchen Zweck haben die Aufrufe davor, sollen die für farbeFinden() wichtig sein?
bei der statischen Methode offensichtlich keinen Einfluss, die Methode erstellt sich dann ja ein neues Farben-Objekt



```
Slotfarben=MeineFarbe.farbefinden();
        
        nf1.setText(String.valueOf(Farben.farbefinden())); 
        wert2=übergang;
        nf2.setText(String.valueOf(Farben.farbefinden())); 
        wert3=übergang;
        nf3.setText(String.valueOf(Farben.farbefinden()));
```
Slotfarben ist der Rückgabewert von farbefinden(), warum rufst du danach immer wieder farbefinden() auf?
sollen neue Ergebnisse kommen? die immer gleiche Rechnung zu wiederholen ist unsinnig, arbeite doch einfach mit dem vorhandenen Ergebnis Slotfarben (natürlich unbedingt klein schreiben!!)

willst du vielleicht zwischendurch übergang ändern? dann musst du aber auch übergang etwas zuweisen 
und nicht andersrum wert2, wert3 usw. mit übergang beschreiben

> wert1=übergang;
davor genauso fraglich


und schließlich zu einer deiner Fragen:
> [Z@2e56553e
ist genau das String.valueOf() des Array, was erwartest du ansonsten? 
man könnte auf sowas lesbares hoffen, was Arrays.toString() liefert, a la "[blau, grün, .. ]", 
aber selbst wenn, was nützt es dir, in drei Textfelder dasselbe zu schreiben? ok, mit übergang kommt vielleicht anderes raus

also String.valueOf() bzw. toString() auf ein Array ist wenig ergibig, 
Arrays.toString() gibt es oder mit einer Schleife das Array durchlaufen und Text zusammenstellen oder nur einzelne Array-Elemente anschauen

generell möchte ich jetzt nicht zu sehr schauen was du noch alles fragst,
du musst viele Grundlagen erstmal aufräumen, die Dinge langsam kennen lernen,
was ist ein Array?
das geht in einem main-Programm mit 3 Zeilen ganz gut, ungünstig mitten in einem komplizierten GUI-Programm mit Listenern und tausend anderen Befehlen


----------



## xcaver (9. Jan 2013)

ich weis ich bin nicht gerade besonders gut in java ... ich fang ja grad auch erst an ...
ich entschuldige mich nochmal vielmals für meine vielen dummen fehler -_-

ich habe mal bissel was geändert doch jetzt kommt der fehler wd mit leeren String ...
und ich weis nicht wie man den wegbekommt ... 
ich weis das ich diese fehlermeldung schonmal hatte aber so wie ich sie damals wegbekommen habe geht das nun nicht =( Das Programm starten, die Fehlermeldung kommt beim ausführen des Buttens.


```
double MeinKonto;
  double MeinEinsatz;
  public int wert1;
  public int wert2;
  public int wert3; 
  public static int übergang;  
  Bandit meinBandit = new Bandit();
  boolean[]slotfarben = {false,false,false,false};

//.....

public void ziehen_ActionPerformed(ActionEvent evt) {
//....

Farben meineFarbe =new Farben();
        slotfarben=meineFarbe.farbefinden();
        meineFarbe.setGelb(slotfarben[1]);
        meineFarbe.setRot(slotfarben[0]);
        meineFarbe.setBlau(slotfarben[3]);
        meineFarbe.setGruen(slotfarben[2]);
        
        wert1=übergang; 
        nf1.setBackground(Color.getColor(String.valueOf(meineFarbe))); 
        wert2=übergang;
        nf2.setBackground(Color.getColor(String.valueOf(meineFarbe))); 
        wert3=übergang;
        nf3.setBackground(Color.getColor(String.valueOf(meineFarbe)));
}
```


```
public class Farben {
  
  // Anfang Attribute
  private boolean Gelb;
  private boolean Rot;
  private boolean Gruen;
  private boolean Blau;
  public  static int farbe1;
  
  public static boolean[] farbefinden = new boolean [4] ;
  
  
  // Ende Attribute
  
  // Anfang Methoden
  public static boolean[] farbefinden(){
    Farben A1 = new Farben ();  
    
    int farbe1 = Spiel.übergang  ;
    if (farbe1 == 1) {
      
      A1.setRot(true);
      A1.setGelb(false);
      A1.setGruen(false);
      A1.setBlau(false);
    }
    else if (farbe1 ==2) {
      A1.setRot(false);
      A1.setGelb(false);
      A1.setGruen(true) ;
      A1.setBlau(false);
    } 
    else if (farbe1 ==3) {
      A1.setRot(false);
      A1.setGelb(true);
      A1.setGruen(false);
      A1.setBlau(false);
    }  
    else if (farbe1 ==4) {
      A1.setRot(false);
      A1.setGruen(false);
      A1.setGelb(false);
      A1.setBlau(true);
    } // end of if-else
    farbefinden[0] =A1.getRot()  ;
    farbefinden[1]=A1.getGelb();
    farbefinden[2]=A1.getGruen();
    farbefinden[3]=A1.getBlau();
    return farbefinden;  
  }
}
```


----------



## SlaterB (9. Jan 2013)

> die Fehlermeldung kommt beim ausführen des Buttens.

willst du die nicht genauer nennen? solcher Verzicht ist eher alsbald zu entschuldigen als Fehler allgemein,
mitarbeiten!


```
wert1=übergang; 
        nf1.setBackground(Color.getColor(String.valueOf(meineFarbe))); 
        wert2=übergang;
        nf2.setBackground(Color.getColor(String.valueOf(meineFarbe))); 
        wert3=übergang;
        nf3.setBackground(Color.getColor(String.valueOf(meineFarbe)));
```
sieht nicht grad besser aus als zuvor, was habe ich zu übergang und wert1-3 gesagt?

was soll String.valueOf() des Farben-Objektes liefern?

Farben schein generell nur mit boolean zu arbeiten, wie soll Color.getColor() damit etwas anfangen?


----------



## xcaver (9. Jan 2013)

aja gerade weil Farben mit boolean arbeitet wollte ich es in einen string zurück wandeln .... 
ich dachte das Color.getColor() in string wäre =/ zu dem übergang=wert1, ich dachte ich häts geändert ...


```
übergang = wert1;  
         nf1.setBackground(Color.getColor(meineFarbe)); 
        übergang = wert2;
        nf2.setBackground(Color.getColor(meineFarbe)); 
        übergang = wert3;
        nf3.setBackground(Color.getColor(meineFarbe));
```

jetzt habe ich aber eine andere fehler meldung :


```
Compiliere E:\Java\SPIELMASCHINE\farben\Spiel.java mit Java-Compiler
Spiel.java:127:33: error: no suitable method found for getColor(Farben)
         nf1.setBackground(Color.getColor(meineFarbe)); 
                                ^
    method Color.getColor(String,int) is not applicable
      (actual and formal argument lists differ in length)
    method Color.getColor(String,Color) is not applicable
      (actual and formal argument lists differ in length)
    method Color.getColor(String) is not applicable
      (actual argument Farben cannot be converted to String by method invocation conversion)
Spiel.java:129:32: error: no suitable method found for getColor(Farben)
        nf2.setBackground(Color.getColor(meineFarbe)); 
                               ^
    method Color.getColor(String,int) is not applicable
      (actual and formal argument lists differ in length)
    method Color.getColor(String,Color) is not applicable
      (actual and formal argument lists differ in length)
    method Color.getColor(String) is not applicable
      (actual argument Farben cannot be converted to String by method invocation conversion)
Spiel.java:131:32: error: no suitable method found for getColor(Farben)
        nf3.setBackground(Color.getColor(meineFarbe));
                               ^
    method Color.getColor(String,int) is not applicable
      (actual and formal argument lists differ in length)
    method Color.getColor(String,Color) is not applicable
      (actual and formal argument lists differ in length)
    method Color.getColor(String) is not applicable
      (actual argument Farben cannot be converted to String by method invocation conversion)
3 errors
```


----------



## SlaterB (9. Jan 2013)

vergiss doch so unsinnige Mammutprogramme voller Fehler und konzentriere dich auf einzelne Aufgaben,

ich weiß gar nicht was du machen willst, du postest Code der keinen Sinn ergibt ohne richtige Erklärungen

hier ein Programm mit dem man tatsächlich anfangen kann zu arbeiten:

```
public class Test2 {
    public static void main(String[] args)  {
        String st = "";
        Color c = Color.getColor(st);
        System.out.println(c);
    }
}
```
was genau soll passieren, welche Werte kommen dir für st in den Sinn? "true", "false" usw. bringen offensichtlich nicht viel (ausprobieren!),
zielst du auf Namen für Farben wie "blue" ab?

als nächstes kannst du ja deine Farben-Klasse ergänzen, vollkommen unabhängig von Spiel mit all seiner GUI, Buttons usw., 
auf die statische Variable 'übergang' verzichte vorerst, einfach ist z.B. ein Parameter an der Methode von Farben,

wie stellst du dir das alles vor, wo sollen die Strings herkommen?
irgendwo musst du wohl Code einbauen der tatsächlich mit z.B. if/ else auf die boolean "blue" usw. zusammenbaut

bevor du fragst: nein, es gibt keine Möglichkeit, die Namen von boolean-Variablen direkt zu verwenden


----------



## xcaver (9. Jan 2013)

Also erstmal zu dem was ich machenmöchte :

ich möchte eine spielmaschine konstruieren, 
hier sollen halt 3 felder sein (numberfiels) welche mit zufälligen zahlen gefühlt werden sollen. jenachdem welche zahl kommt soll das feld eine andere hindergrundfarbe haben.
Und man hat halt noch ein bestimtes guthaben (eingetragen in einem label) und man kann seinen einsatz angeben (in einem nuberfield). dann soll halt noch jenach dem welche kombination von zahlen die drei verschiedenen numberfiels anzeigen der einsatz verdoppelt vervierfacht oder einfach nur vom guthaben abgezogen werden. so ich glaub das ist erstmal das programm was ich so machen möchte ...
ich habe halt jetzt folgende klassen; Spiel, Bandit, Farben.
mein Programm läuft so weit ohne die veränderung des Backgrounds von den numberfields, nun hatte ich halt vor mithilfe von der klasse Farben diese jenach angezeigter zahl ändern.
ich hatte mir gedacht das es eine methode in der klasse-Farben gibt, diese griegt dann die werte der jeweiligen numberfields (also das sind wert1, wert2,wert3 ) und dann soll sie halt jenach dem ob wert1 zb 1 ist den Background blau, bei 2 rot uns... färben.
ich hatte halt die idee das in meiner Methode "farbefinden" in der Klasse Farben abgefragt wird welcher wert wert1 hat und so und dan eine farbe zurück gibt...


----------



## SlaterB (9. Jan 2013)

speichere die Farben, gleich die Color-Objekte, in einem statischen Array, Grunddaten,

dann kannst du einen zufälligen Index 0-x bestimmen und eine Color aus dem Array holen

lange boolean-Abenteuer scheinen nicht zu helfen


----------



## xcaver (9. Jan 2013)

Meinst du das jetzt so ??

```
Object[] objekte =new Object[4]
  Farben bunt = new Farbe();
  objekt[0] = (Object)bunt;
  private objekt[1] Gelb;
  private objekt[2] Rot;
  private objekt[3] Gruen;
  private objekt[4] Blau;
```

oder is das eher so richtig ??


```
Object[] objekte =new Object[4]
  Farben bunt = new Farbe();
  objekt[0] = (Object)bunt;
  objekt[1] = (object)Gelb;
  objekt[2] = (object)Rot;
  objekt[3] = (object)Gruen;
  objekt[4] = (object)Blau;
```


----------



## SlaterB (9. Jan 2013)

ein Array vom Typ Color, darin Color-Objekte

Zeilen wie
> private objekt[1] Gelb;
und 
> objekt[1] = (object)Gelb;
sind gar keine Java-Syntax, auf Object muss man übrigens quasi nie oder komplett nie casten, alles ist von Natur aus Object

im Zweifel vielleicht noch einfacher:
ist es dir möglich, die Farbe gelb, das zugehörige Color-Objekt, irgendwie irgendwo her zu bekommen und in einer Variablen abzulegen?
> Color yellow = ..;

bevor man mit Zufallswerten, Auswahl usw. anfängt sollte man immer erstmal eine Sache direkt kennen..


----------



## xcaver (9. Jan 2013)

ich weis nicht ob ich das jetzt richtig verstanden habe ....
meinst du das so? 

```
Color[] bunt;
   bunt=  new Color[4]  ;
  Color yellow = new bunt[1];
  Color blue = new bunt[2];
  Color red = new bunt[3];
  Color green = new bunt[4];
```


----------



## SlaterB (9. Jan 2013)

> new bunt[1];
ist wiederum keine Java-Syntax, das kann ich doch unmöglich meinen

ich habe mich inzwischen geistig völlig vom Array gelöst, vergiss du das auch bitte,
der einfachste erste Schritt im Moment ist, eine Farbe, ein Color-Objekt zu erhalten,

stell dir vor du möchtest ganz ohne Array, ganz ohne Zufall, ohne Auswahl und all die komplizierten Dinge in nf2 eine Hintergrundfarbe setzen, wie gehst du da vor?
wie ich jetzt weiter oben sehe hast du auch schon entsprechenden Code:
> nf2.setBackground(Color.yellow)

also das Ablegen einer Farbe in einer Variablen wäre demnach
> Color yellow = Color.yellow;

bitte diese Zeile lesen, als zumindest einmal korrekte Java-Syntax anerkennen,

------

so, wie gesagt ist mein Vorschlag nun als nächsten Schritt, ein Array vom Typ Color anzulegen,
wie lang musst du wissen, ich schätze 4-5 für anscheinend 4 gewünschte Farben

erzeuge ein Array für 4 Farben, befülle das Array so dass die Farben an den Positionen im Array stehen,
ist das verständlich?


Ziel ist dann dass du Code wie

```
if (wert1 ==1) {
          nf1.setBackground(Color.blue) ;
        } // e of if
        if (wert1==2) {
          nf1.setBackground(Color.yellow) ;
        } // end of if
        if (wert1==3) {
          nf1.setBackground(Color.red)   ;
        } // end of if
        if (wert1==4) {
          nf1.setBackground(Color.green)  ;
        }
```
durch

```
nf1.setBackground(farben[wert1])  ;
```
ersetzen kannst, farben ist das Array, mit dem Index holt man genau die passende Farbe raus


----------



## xcaver (9. Jan 2013)

Ich bin total verwirt ... 
ich habe das jetzt mal so geschrieben, denke das ist dein vorgang den du mir vorgeschlagen hast ...
aufjedenfall nimmt der Editor es an =P also dürfte es ja ein JAava-Sytax sein =D 

```
Color yellow = Color.yellow;
    Color red = Color.red;
    Color blue = Color.blue;
    Color green = Color.green;
    Color[] bund = new Color[4];
     bund[1] = red;
     bund[2] = yellow;
     bund [3] =green;
     bund [4] =  blue;
```
denke mal jetzt stehen die farben an den entsprechenden positionen wen ich das richtig verstehe ( rot=1, geld =2, usw .. )

als nächstes müsste ja dann eine methode mein wert(die zufals zahl) den entsprechenden feld im array zuweisen oder?


----------



## SlaterB (9. Jan 2013)

dieses Array ist final, das sind Grunddaten, sie werden statisch abgelegt, nie wieder darf irgendjemand dieses Array verändern, kaputtmachen

was leistet es? wie gesagt kann man nun mit einem int-Wert eine Color herausholen,
eigentlich simpel aber wie zum Ende des vorherigen Postings geschrieben besser als viele if/else und wahrscheinlich auch das was du mit deiner komplizierten Farben-Klasse erreichen willst



> ich hatte mir gedacht das es eine methode in der klasse-Farben gibt, diese griegt dann die werte der jeweiligen numberfields (also das sind wert1, wert2,wert3 ) und dann soll sie halt jenach dem ob wert1 zb 1 ist den Background blau, bei 2 rot uns... färben.


->

```
nf1.setBackground(farben[wert1])  ;
```
bzw. 'bund', wie immer das Array heißt, du meinst vielleicht das Wort deutscher Syntax  'bunt'


----------



## xcaver (9. Jan 2013)

hey danke für die hilfe bis hier hin =D 
ja eigentlich sollte es bunt heisen naja aber egal =P

ich habe mal bissel was ausprobiert erstmal in einer klasse direkt im butten ...
(wenn was an informationen fehlt bitte schreiben hier ist erstmal der butten):

```
public void ziehen_ActionPerformed(ActionEvent evt) {
    MeinEinsatz = nfeinsatz.getDouble();
    
    MeinKonto = Double.parseDouble(lakonto.getText());
    if (MeinEinsatz > MeinKonto) {
      Bandit.einsatz();
      
    }
    else {
      // end of if
      if (Bandit.buchen() < 0) {
        Spiel.ta.append("\n Zuwenig Guthaben ! \n"); 
        Spiel.tfaut.setText(" Zuwenig Guthaben ! \n");
      } else {
        lakonto.setText(String.valueOf(MeinBandit.buchen()));
        wert1 = Bandit.Zufall();
        wert2 = Bandit.Zufall();
        wert3 = Bandit.Zufall();
        nf1.setText(String.valueOf(wert1)); 
        nf2.setText(String.valueOf(wert2)); 
        nf3.setText(String.valueOf(wert3));
        Bandit.gewinn();
        
        
        Color[] bund = new Color[4];
        Color yellow = Color.yellow;
        Color red = Color.red;
        Color blue = Color.blue;
        Color green = Color.green;
        
        
        bund[1] = red;
        bund[2] = yellow;
        bund [3] =green;
        bund [4] =  blue;
        int übergang;
        übergang= wert1;
        if (übergang==1) {
          nf1.setBackground(bund[1]);
        } // end of if
        if (übergang==2) {
          nf1.setBackground(bund[2]);
        } // end of if
        if (übergang==3) {
          nf1.setBackground(bund[3]);
        } // end of if
        if (übergang==4) {
          nf1.setBackground(bund[4]);
        } // end of if
        
      }
      
      
      Bandit.Pleite();
    }
    
  } // end of zieh
```

doch da hab ich wd eine fehlermeldung:

```
Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 4
	at Spiel.ziehen_ActionPerformed(Spiel.java:129)
	at Spiel$1.actionPerformed(Spiel.java:46)
	at java.awt.Button.processActionEvent(Button.java:409)
	at java.awt.Button.processEvent(Button.java:377)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:682)
	at java.awt.EventQueue$3.run(EventQueue.java:680)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:696)
	at java.awt.EventQueue$4.run(EventQueue.java:694)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
```


theoretisch hab ich doch hier im butten wd das array erstellt und die felder mit daten (farben) besetzt.
dann hab ich halt wd gans normal meine abfrage welche zahl gegeben ist und dann soll halt eigentlich jenachdem aus dem array die farbe genommen werden und der Background von nf1 verändert werden ... 
=/ nur warum geht das nicht ?


----------



## SlaterB (9. Jan 2013)

das Array muss einen größer, die Indexe beginnen bei 0, du kannst aber auch 0 leerlassen und ignorien

das Array wie gesagt besser nur einmal irgendwo statisch ablegen, schadet aber auch nicht in der Methode,
hoffentlich nur nicht mehrfach woanders auch noch definiert


```
if (übergang==1) {
          nf1.setBackground(bund[1]);
        } // end of if
        if (übergang==2) {
          nf1.setBackground(bund[2]);
        } // end of if
        if (übergang==3) {
          nf1.setBackground(bund[3]);
        } // end of if
        if (übergang==4) {
          nf1.setBackground(bund[4]);
        }
```
ist wie nun wirklich schon sehr deutlich angesprochen gerade nicht gut, sondern

```
nf1.setBackground(bund[wert1]);
```
die Kurzform, übergang spielt keine Rolle


----------



## xcaver (9. Jan 2013)

ach stimmt vergessen jetzt gehts 
ne habs verstanden einmal reichts =D

achso ich hatte die zeile nicht verstanden ...


> nf1.setBackground(bund[wert1]);


jetzt weis ichs  =D 

ich hab jetzt mal probier das selbe in eine neue klasse zu schreiben aber da kommen dann wieder fehler die ich nicht ferstehe warum das da nicht geht aber im butten schon =/


```
public class Farben {
  
  // Anfang Attribute
  Color[] bund = new Color[5];
        Color yellow = Color.yellow;
        Color red = Color.red;
        Color blue = Color.blue;
        Color green = Color.green; 
        bund[1] = red;
        bund[2] = yellow;
        bund [3] =green;
        bund [4] =  blue;
        
  public static int probe1;
  public static int probe2;
  public static int probe3;
  // Ende Attribute
  
  // Anfang Methoden
  public void färben(){
    probe1= Spiel.wert1;
    probe2= Spiel.wert2;
    probe3= Spiel.wert3;
    
    Spiel.nf1.setBackground(bund[probe1]);
    Spiel.nf2.setBackground(bund[probe2]);
    Spiel.nf3.setBackground(bund[probe3]);
  }
  // Ende Methoden
} // end of Farben
```


```
Compiliere E:\Java\SPIELMASCHINE\fertig\Farben.java mit Java-Compiler
Farben.java:17:14: error: ']' expected
        bund[1] = red;
             ^
Farben.java:17:15: error: ';' expected
        bund[1] = red;
              ^
Farben.java:17:17: error: illegal start of type
        bund[1] = red;
                ^
Farben.java:18:14: error: ']' expected
        bund[2] = yellow;
             ^
Farben.java:18:15: error: ';' expected
        bund[2] = yellow;
              ^
Farben.java:18:17: error: illegal start of type
        bund[2] = yellow;
                ^
Farben.java:19:15: error: ']' expected
        bund [3] =green;
              ^
Farben.java:19:16: error: ';' expected
        bund [3] =green;
               ^
Farben.java:19:18: error: illegal start of type
        bund [3] =green;
                 ^
Farben.java:20:15: error: ']' expected
        bund [4] =  blue;
              ^
Farben.java:20:16: error: ';' expected
        bund [4] =  blue;
               ^
Farben.java:20:18: error: illegal start of type
        bund [4] =  blue;
                 ^
12 errors
```


----------



## xcaver (9. Jan 2013)

nur als hinweis:
wenn ich die atribute direkt in die mtehode schreibe gehts auch nicht da kommt dan aber ein andere fehler:


```
public class Farben {
  
  // Anfang Attribute
  
        
  public static int probe1;
  public static int probe2;
  public static int probe3;
  // Ende Attribute
  
  // Anfang Methoden
  public void färben(){
    probe1= Spiel.wert1;
    probe2= Spiel.wert2;
    probe3= Spiel.wert3;
    
    Color[] bund = new Color[5];
    Color yellow = Color.yellow;
    Color red = Color.red;
    Color blue = Color.blue;
    Color green = Color.green; 
    bund[1] = red;
    bund[2] = yellow;
    bund [3] =green;
    bund [4] =  blue;
    
    Spiel.nf1.setBackground(bund[probe1]);
    Spiel.nf2.setBackground(bund[probe2]);
    Spiel.nf3.setBackground(bund[probe3]);
  }
  // Ende Methoden
} // end
```


```
Compiliere E:\Java\SPIELMASCHINE\fertig\Farben.java mit Java-Compiler
Farben.java:25:5: error: cannot find symbol
    Color[] bund = new Color[5];
    ^
  symbol:   class Color
  location: class Farben
Farben.java:25:24: error: cannot find symbol
    Color[] bund = new Color[5];
                       ^
  symbol:   class Color
  location: class Farben
Farben.java:26:5: error: cannot find symbol
    Color yellow = Color.yellow;
    ^
  symbol:   class Color
  location: class Farben
Farben.java:26:20: error: cannot find symbol
    Color yellow = Color.yellow;
                   ^
  symbol:   variable Color
  location: class Farben
Farben.java:27:5: error: cannot find symbol
    Color red = Color.red;
    ^
  symbol:   class Color
  location: class Farben
Farben.java:27:17: error: cannot find symbol
    Color red = Color.red;
                ^
  symbol:   variable Color
  location: class Farben
Farben.java:28:5: error: cannot find symbol
    Color blue = Color.blue;
    ^
  symbol:   class Color
  location: class Farben
Farben.java:28:18: error: cannot find symbol
    Color blue = Color.blue;
                 ^
  symbol:   variable Color
  location: class Farben
Farben.java:29:5: error: cannot find symbol
    Color green = Color.green; 
    ^
  symbol:   class Color
  location: class Farben
Farben.java:29:19: error: cannot find symbol
    Color green = Color.green; 
                  ^
  symbol:   variable Color
  location: class Farben
10 errors
```


----------



## SlaterB (9. Jan 2013)

API-Klassen muss man importieren, 
andere Befehle als Deklarationen kann man nicht direkt in die Klasse schreiben, gehören in Methoden

es gibt auch statische Initialisierungs-Blocks (falls interessant: überleg mal ob du mit dem Stichwort etwas anderes anfangen kannst als hier zu fragen)

und man kann das Array auch in einer Zeile gleich mit Werten definieren
(boolean[]Slotfarben = {false,false,false,false}; )


----------



## xcaver (9. Jan 2013)

ok jetzt raff ich gar nix mehr ...
ka was api klassen sind undvon statische initialisierungs-blocks hab ich auch noch nie was gehört =)

ich glaub ich las das jetzt einfach in der butten methode  danke fürs helfen =D

xcaver


----------



## SlaterB (9. Jan 2013)

besser ist es, 
in anderen Klassen hast du dich aber schon z.B. zu

```
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
```
aufgerafft

tja, man muss auch verstehen was man da tut


----------

