# ActionListener für alle Buttons



## sgtpro (10. Okt 2016)

Hallo Leute,

```
import javax.swing.SwingUtilities;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.JOptionPane;
public class Lightsout
{
    int r=32;
    int g=32;
    int b=32;
    static int i;
    public Lightsout(){
        Gui();
    }

    public void Gui()
    {

        JFrame fenster = new JFrame("Lights out");
        fenster.setSize(/*1300,1036*/510,510);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.getContentPane();
        fenster.setLocationRelativeTo(null);
        fenster.setLayout(null);
        fenster.setResizable(false);
        fenster.setVisible(true);

        JPanel panel = new JPanel();
        panel.setLocation(0,0);
        panel.setSize(/*1300,1036*/500,500);
        panel.setLayout(new GridLayout (0,5,7,7));

        fenster.add(panel);

        JButton []button ={new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton()};
        for(int i =0; i < 25;i++)
        {
            panel.add(button[i]);

            button[i].setBackground(new Color(r,g,b));
        }

        panel.setVisible(true);
        fenster.setVisible(true);
        ActionListener wechseln = new ActionListener()
            {
                public void actionPerformed(ActionEvent w)
                {
                    if(r==b)
                    {
                        r=255;
                        g=255;
                        b=0;
                    }
                    else
                    {
                        r=32;
                        g=32;
                        b=32;
                    }
                    button[i].setBackground(new Color(r,g,b));
                    SwingUtilities.updateComponentTreeUI(fenster);
                    /*panel.repaint();
                    fenster.repaint(); */
                    //button[i].setBackground(new Color(r,g,b));
                }
            };

        button[i].addActionListener(wechseln);

        SwingUtilities.updateComponentTreeUI(fenster);

    }

}
```
ich und ein Kumpel programmieren zur Zeit an einem "Lightsout" auf blueJ.
Wir haben ein Gui mit 25 Buttons. Nun versuchen wir, dass die Buttons auf "Konpfdruck" die Farbe von Gelb auf Schwarz und umgekehrt wechselt.
Das Problem: Es funktioniert nur bei einem einzigen Button.
Hier der Code, ein Lösungsvorschlag wäre knorke. (falls ihr mir sagen könntet, wie man text in so eine Codeform ändert, wäre das auch schön)


----------



## KaffeeFan (10. Okt 2016)

Du versucht die farbe deines Arrays aus JButtons zu ändern und nicht von einem JButton.

Gruß
Lukk


----------



## VfL_Freak (10. Okt 2016)

Moin,
ihr habt zwar jede Menge Button, aber nur _einen _ActionListener bzw. er wird nur _einem _Button zugewiesen !
Theoretisch könntet ihr ihn in der FOR-Schleife zuweisen, aber das gesamte Konstrukt mutet doch ziemlich konfus an!
Schaut Euch mal dies hier an: http://www.java-forum.org/thema/fragen-zu-variablennamen.62032/

BTW: bitte meine Signatur beachten, so bekommt man ja Augenkrebs !!

Gruß Klaus


----------



## Robat (10. Okt 2016)

Zusätzlich zu dem was Vfl_Freak gesagt hat:

Denkt bitte immer daran, dass man beim Programmieren eine Trennung von GUI und Logik vorzieht.
Ihr _"klatscht"_ momentan alles in eine Klasse, was die Lesbarkeit zusätzlich beeinträchtigt.

Als kleiner Anreitz:
1. GUI in eine eigene Klasse und JFrame implementieren.
2. ActionListener in eine eigene Klasse und mittels btn.addActionListener(new ChangeColorListener());
3. damit verbunden: Visibilität eurer Variablen.

Nicht essentiell um das Programm zum laufen zu bringen, aber lieber gleich mit _"ordentlicher"_ Programmierung anfangen.


----------



## sgtpro (10. Okt 2016)

Wir haben probiert, den Listener in die Schleife zu packen, hat aber nicht funktioniert.


----------



## VfL_Freak (10. Okt 2016)

sgtpro hat gesagt.:


> Wir haben probiert, den Listener in die Schleife zu packen, hat aber nicht funktioniert.


und das heißt *WAS *???

http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html

Gruß Klaus


----------



## sgtpro (10. Okt 2016)

```
JButton []button ={new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton()};
        for(int i =0; i < 25;i++)
        {
            panel.add(button[i]);
            button[i].setBackground(new Color(r,g,b));
            ActionListener wechseln = new ActionListener()
                {
                    public void actionPerformed(ActionEvent w)
                    {
                        if(r==b)
                        {
                            r=255;
                            g=255;
                            b=0;
                        }
                        else
                        {
                            r=32;
                            g=32;
                            b=32;
                        }
                        button[i].setBackground(new Color(r,g,b));
                        SwingUtilities.updateComponentTreeUI(fenster);
                        /*panel.repaint();
                        fenster.repaint(); */
                        //button[i].setBackground(new Color(r,g,b));
                    }
                };

            button[i].addActionListener(wechseln);
        }
```

Ab hier will er nich mehr. Entweder er meckert bei dem "i" bei button[i] oder, wenn man das int bei der vorschleife rausnimmt (i ist ja als static variable definiert), kommt beim gui ein ganzes fehlerfenster, wenn man auf einen button klickt.

Die Antworten mit dem "sauberen programmieren" sind verständlich, müsst ich mich mal mit auseinandersetzen 
Aber erstmal will ich das Button/Array/Listener Problem lösen.


----------



## VfL_Freak (10. Okt 2016)

_*WO *_welches _*i*_ in _*welcher *_Zeile ??
Ist es wirklich so schwer, ein Problem konkret zu benennen ?????


----------



## sgtpro (10. Okt 2016)

Falls die Variable i nicht als static Variante benannt ist,
meckert er bei "button[i].setBackground(new Color(r,g,b));"
und bei " button.addActionListener(wechseln);", mit der Fehlermeldung "local variables referenced from an inner class must be final or effectively final", falls ich i als static Variable definiere, kann ich zwar compilen, aber sobald ich auf einen Button drücke, kommt ein neues fenster mit fehlermeldungen.

Wir versuchen jetzt auch mal, die ganzen buttons in einer anderen Klasse zu erzeugen, vllt funktioniert das besser. ich meld mich, wenns was neues gibt.
Ich hoffe, die Beschreibung war genau genug.


----------



## X5-599 (10. Okt 2016)

Das Problem ist, dass dem ActionListener die Zählvariable "i" nicht mehr zur Verfügung steht. Wenn "i" final wäre, sähe das wohl anders aus (so aus dem Gedächtnis heraus gesagt...). Aber eine Zählvariable die final sein soll... das schliesst sich gewissermaßen aus.
Um an den entsprechenden Button zu kommen, der das Action Event ausgelöst hat, kann man folgendes machen:

```
public void actionPerformed(ActionEvent w)
{
  JButton derButtonWelcher = (JButton)w.getSource();
  derButtonWelcher.setBackground(...);
}
```


----------



## sgtpro (10. Okt 2016)

Vielen Dank, das klappt 
Ist nur bissl komisch, weil man manchmal doppelt klicken muss, damit sich die Farbe wechselt. Liegt wohl irgendwie an der codierung.
Jetzt müssen wir als nächstes schaffen, dass sich nicht nur der Button selbst ändert, sondern auch die Buttons neben an(also oben, unten, links und rechts).


----------



## sgtpro (10. Okt 2016)

Hey Leute, hätte jemand eine Idee, wie man es machen könnte, dass die buttons darunter und daneben auch eingefärbt werden?
mit button[i+1] kann man den button daneben einfärben, aber im Actionlistener will er ja die Variable i nicht mehr nehmen..Wie kann man es bewerkstelligen, dass man im Actionlistener sagen kann:
wenn du den Button drückst soll der Button rechts daneben auch eingefärbt werden? 
 wir tüfteln schon die ganze zeit rum, aber uns fällt keine Lösung ein...
Ein Lösungsvorschlag wäre echt knorke.


----------



## Robat (10. Okt 2016)

Hab da eine Idee - würde vorher aber gerne noch mal dein Code sehen wie er jetzt aussieht.
Stichwort: Index.
Poste den Code bitte noch mal.


----------



## sgtpro (10. Okt 2016)

```
import javax.swing.SwingUtilities;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.JButton.*;
import javax.swing.JOptionPane;
public class Lightsout
{
    int r=32;
    int g=32;
    int b=32;

    int k;
    int y;
    int i;

    public Lightsout(){
        Gui();
    }

    public void Gui()
    {

        JFrame fenster = new JFrame("Lights out");
        fenster.setSize(/*1300,1036*/510,510);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.getContentPane();
        fenster.setLocationRelativeTo(null);
        fenster.setLayout(null);
        fenster.setResizable(false);
        fenster.setVisible(true);

        JPanel panel = new JPanel();
        panel.setLocation(0,0);
        panel.setSize(/*1300,1036*/500,500);
        panel.setLayout(new GridLayout (0,5,7,7));

        fenster.add(panel);

        JButton []button ={new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton()};

        //while (k>2 && k<24){
        for(int i =0; i < 25;i++)
        {
            panel.add(button[i]);
            button[i].setBackground(new Color(r,g,b));
          
            ActionListener wechseln = new ActionListener()
                {
                    public void actionPerformed(ActionEvent w)
                    {

                        if(r==b)
                        {
                            r=255;
                            g=255;
                            b=0;
                        }
                        else
                        {
                            r=32;
                            g=32;
                            b=32;
                        }
                        button[i-1].setBackground(new Color(r,g,b));
                        /*JButton j = (JButton)w.getSource();
                        j.setBackground(new Color(r,g,b)); */
                      
                        //button[b+1].setBackground(new Color(240,235,0));

                        //button[i].setBackground(new Color(r,g,b));
                        SwingUtilities.updateComponentTreeUI(fenster);
                        /*panel.repaint();
                        fenster.repaint(); */
                        //button[i].setBackground(new Color(r,g,b));
                    }
                };

            button[i-1].addActionListener(wechseln);
           }

                  
              
            //button[i].setBackground(new Color(240,235,0));

        }
```
Hoffe du siehst das Problem, falls nicht, nochmal schreiben


----------



## Robat (10. Okt 2016)

Und button[i-1] funktioniert nicht, nicht wahr?


----------



## sgtpro (10. Okt 2016)

jap, bei button[ i ] _ auch ned_


----------



## Robat (10. Okt 2016)

Ich muss ehrlich sagen, dass es schwer ist an eurem Code das um zusetzten was ihr wollt ohne ihn komplett zu ändern.

Das i kennt er in euerem ActionListener nicht, weil du es in der forschleife noch mal local definierst. du hast als globale variblae int i. und in der For noch mal int i. Wenn du einfach nur
for(i = 0;..;..) schreibst, kennt er zmd das i.

Vielleicht finden wir so einen Ansatz. 


Kannst du mir vielleicht noch mal in ein - zwei sätzen zusammen fassen, was ihr jetzt letztendlich machen wollt?
Ihr wollt ein Programm schreiben mit x buttons. Wenn ihr auf einen Button drückt, wollt ihr dass die Buttons um den Button drum herum die farbe ändern?


----------



## sgtpro (10. Okt 2016)

Ganz genau. Das ist das Spiel "Lights out".
Du drückst auf einen Button, und der Button selbst, und die buttons über, unter, links und rechts von ihm wechseln ihren an/aus zustand. Das spiel ist gewonnen, wenn alle Buttons aus/schwarz sind. Mittllerweile sind an und aus auch schon random auf der "map" verteilt.


----------



## Robat (10. Okt 2016)

Okay,.. da habt ihr euch ein ganz schönes Stück arbeit ausgesucht - gerade - ohne euch zu nahe treten zu wollen - für euren Kenntnisstand.

Das wird aber so wie ihr angefangen habt nix. Alles in eine Klasse zu machen --> viel zu unübersichtlich. Ihr werdet bald den Überblick verlieren.
Ich empfehle ich wirklich das ganze noch mal mit einem Blatt Papier zu überdenken.
Malt euch euer Spielfeld auf - überlegt was ihr für Klassen braucht. Überlegt komplett durch wie ihr es aufbauen wollt.

Die GUI in eine eigene Klasse.
Den ActionListener in eine eigene (unter) Klasse.
Und dann noch mal die Logik - Licht an - Licht aus in zmd eine eigene Methode.

Ich würde euch wirklich abraten das so weiter zu führen.
Der Code ist zmd für mich zu unübersichtlich um da einen guten Weg zu finden - und mit gut meine ich nicht über 10 Umwege - lieber gleich schön coden.

Nehmt das Projekt um euer Wissen zu erweitern. Guckt euch die Modifier für Variablen an.

So viel erstmal dazu.
Ich überlege trotzdem mal weiter obs für euch eine Lösung gibt - aber ihr werdet dann bald vor dem nächsten Problem stehen.

PS: nicht böse gemeint.


----------



## incluedu (11. Okt 2016)

Servus

Ich hab mir deinen letzen code mal angeschaut und denke das du das damit schon machen kannst was du möchtest du must nur ein paar dinge etwas anders machen. 

Ich würde an deiner stelle einen ActionListener für alle deine Buttons verwenden und dann auswerten welches Button gedrückt wurde indem ich die Koordinaten des Buttons im Event mit übergebe. Du hast hier die Möglichkeit das ganze mit einer zusätzlichen Klasse zu realisieren (würde ich in dem Fall nicht machen) , eine innere Klasse zu erstellen  oder was ich dir empfehlen würde einfach den ActionListener an deine Klasse hängen (implementieren).

Dies erreichst du mit folgendem Code

```
public class Lightsout implements ActionListener
```

Weiters würde ich dir empfehlen deine Farben anzulegen oder die Systemfarben zu verwenden. Außerdem würde ich auch noch ein Multidimensionales Array empfehlen und je ein Variable mit deiner Max Anzahl an Reihen und Spalten. Das Array kannst du dann im Konstruktor initialisieren, dann bist du auch mit der Größe Flexibel.


```
private final Color GRAY = new Color(32, 32, 32);
    private final Color YELLOW = new Color(255, 255, 0);

    private int cols = 5;
    private int rows = 5;
    private JButton[][] buttons;
```

In deinem Constructor bzw gui() Methode must du dann dein Array initialisieren und anschließend anstatt einer Schleife zwei Schleifen ineinander abrufen welche über das buttons Array loopen. Hier kannst du dann deine Buttons initialisieren, die Grundfarbe setzen, den ActionListener hinzufügen. Damit du weist welches Button du gedrückt hast Bietet sich meiner Meinung nach am einfachsten an das ActionCommand zu missbrauchen. Hierzu trägst du einfach mit einem Trennzeichen getrennt deine Spalte und Reihe ein.


```
public void gui() {
        JFrame fenster = new JFrame("Lights out");
        fenster.setSize(510, 510);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.getContentPane();
        fenster.setLocationRelativeTo(null);
        fenster.setLayout(new BorderLayout());
        fenster.setResizable(true);
        fenster.setVisible(true);

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(0, cols, 7, 7));

        fenster.add(panel,BorderLayout.CENTER);
        buttons = new JButton[cols][rows];

        for (int c = 0; c < cols; c++) {
            for (int r = 0; r < rows; r++) {
                buttons[c][r] = new JButton();
                buttons[c][r].setBackground(GRAY);
                buttons[c][r].addActionListener(this);
                buttons[c][r].setActionCommand(c + " " + r);

                panel.add(buttons[c][r]);
            }
        }
    }
```

Nun Fehlt nur noch der eigentlich Listener code und dann sollte es funktionieren. Damit das ganze etwas übersichtlicher wird würde ich dir empfehlen es einfach in mehrere kleine Methoden aufzusplitten welche die einzelnen Funktionen für dich erfüllen.

Beim Listener must du aus dem übergebenen ActionCommand wieder deine Koordinaten rausfiltern, dies geht recht einfach wenn du einfach den split befehlt verwendest und auf dein Trennzeichen teilst.

so z.B.

```
@Override public void actionPerformed(ActionEvent e) {

        String[] pos = e.getActionCommand().split(" ");
        int col = Integer.parseInt(pos[0]);
        int row = Integer.parseInt(pos[1]);

        updateButtons(col, row);
    }

    private void updateButtons(int col, int row) {

        changeColor(buttons[col][row]);
        if (col > 0) changeColor(buttons[col - 1][row]);
        if (col < cols - 1) changeColor(buttons[col + 1][row]);
        if (row > 0) changeColor(buttons[col][row - 1]);
        if (row < rows - 1) changeColor(buttons[col][row + 1]);

    }

    private void changeColor(JButton button) {
        if (button.getBackground().equals(GRAY)) {
            button.setBackground(YELLOW);
        } else {
            button.setBackground(GRAY);
        }
    }
```


Wenn du das nun alles zusammenstückelst solltest du eigentlich ein Programm haben das läuft, denke mit dem als basis sollte es klappen das dein Spiel spielbar wird.

Viel Spaß damit


----------



## incluedu (11. Okt 2016)

Servus
Hab grad noch gesehen das sich ein kleiner Fehler eingeschlichen hat, du musst die beiden For Schleifen tauschen sorry

```
for (int r = 0; r < rows; r++) {
            for (int c = 0; c < cols; c++) {
                buttons[c][r] = new JButton();
                buttons[c][r].setBackground(GRAY);
                buttons[c][r].addActionListener(this);
                buttons[c][r].setActionCommand(c + " " + r);
                panel.add(buttons[c][r]);
            }
        }
```


----------



## sgtpro (11. Okt 2016)

Oke, *Vielen Dank, das wird echt helfen, denke ich! *
Aber gerade will er den ActionListener nicht implementieren mit der Meldung "Lightsout is not Abstract and does not override Abstract method ActionPerformed(Java.awt.Event.ActionEvent) in Java.awt.Event.ActionListener"
Warum das?

```
import javax.swing.SwingUtilities;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.JButton.*;
import javax.swing.JOptionPane.*;
import java.awt.event.ActionEvent.*;

public class Lightsout  implements ActionListener
{
    private final Color GRAY = new Color(32, 32, 32);
    private final Color YELLOW = new Color(255, 255, 0);
.
.
.
.
```


----------



## VfL_Freak (11. Okt 2016)

GESTRICHEN WEGEN BLÖDSINN .... 

Du musst auf jeden Fall die Methode _*actionPerformed *_überschreiben !!
Alle abstrakten Methoden müssen in der abgeleiteten Klasse überschrieben werden !!

Gruß Klaus


----------



## Mosa (13. Okt 2016)

Mittlerweile geht jzt alles ich würde nur noch gern wissen ich die Methode end (Zeile 81-98) dazu bringe den array buttons mehrmals zu überprüfen. Wenn ich die Methode aber jzt iwo im Actionlistener verbaun will krieg ich ne Fehlermeldung. Habs auch schon paar mal mit umschreiben verucht, hat aber ned geholfen.

```
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Lightsout implements ActionListener
{
    private final Color GRAY = new Color(32, 32, 32);
    private final Color YELLOW = new Color(255, 255, 0);

    private int cols = 5;
    private int rows = 5;
    private int g;
    private JButton[][] buttons;
    public Lightsout()
    {
        gui();
    }

    public void gui()
    {
        JFrame fenster = new JFrame("Lights out");
        fenster.setSize(1360,2000);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.getContentPane();

        fenster.setLocationRelativeTo(null);
        fenster.setLayout(new BorderLayout());
        fenster.setResizable(false );
        fenster.setVisible(true);

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(0, cols, 7, 7));
        fenster.add(panel,BorderLayout.CENTER);

        do
        {
            cols = Integer.parseInt(JOptionPane.showInputDialog(null,"Wie groß soll das Feld sein? Für 5x5 Felder geben sie fünf und für 6x6 Felder sechs ein",
                    "Eine Eingabeaufforderung",
                    JOptionPane.PLAIN_MESSAGE));
            if(cols <5 || cols>6)
            { JOptionPane.showMessageDialog(null,
                    "Geben sie entweder fünf oder sechs ein.",
                    "Eine Fehlermeldung",                       
                    JOptionPane.WARNING_MESSAGE);
            }
            rows = cols;
        }
        while(cols >6  || cols < 5 );

        buttons = new JButton[cols][rows];
        for (int r = 0; r < rows; r++)
        {
            for (int c = 0; c < cols; c++)
            {
                buttons[c][r] = new JButton();
                buttons[c][r].setBackground(GRAY);
                buttons[c][r].addActionListener(this);
                buttons[c][r].setActionCommand(c + " " + r);
                panel.add(buttons[c][r]);
            }
        }

        int e;
        if(cols < 6) e = 13;
        else e = 18;
        int d = e;
        for(int f = 0; f < e; f++)
        {
            do
            {
                int z = (int)(Math.random()*(cols-1)+0);
                int y = (int)(Math.random()*(cols-1)+0);
                if(buttons[z][y].getBackground().equals(GRAY)) buttons[z][y].setBackground(YELLOW);
                d=d-1;
            }
            while(d > -1);
        }
        SwingUtilities.updateComponentTreeUI(fenster);
    }

    public void end(JButton [][]buttons)
    {
        g=0;
        for (int r = 0; r < rows; r++)
        {
            for (int c = 0; c < cols; c++)
            {
                if(buttons[c][r].getBackground().equals(YELLOW)) g = g+1;
            }
        }
        if(g==0)
        {
            JOptionPane.showMessageDialog(null,
                    "Herzlichen Glückwunsch, sie haben gewonnen",
                    "Eine Meldung",                       
                    JOptionPane.WARNING_MESSAGE);
        }
    }

    public void actionPerformed(ActionEvent e)
    {
        String[] pos = e.getActionCommand().split(" ");
        int col = Integer.parseInt(pos[0]);
        int row = Integer.parseInt(pos[1]);

        updateButtons(col, row);
    }

    private void updateButtons(int col, int row)
    {

        changeColor(buttons[col][row]);
        if (col > 0) changeColor(buttons[col - 1][row]);
        if (col < cols - 1) changeColor(buttons[col + 1][row]);
        if (row > 0) changeColor(buttons[col][row - 1]);
        if (row < rows - 1) changeColor(buttons[col][row + 1]);
    }

    private void changeColor(JButton button)
    {
        if (button.getBackground().equals(GRAY))
        {
            button.setBackground(YELLOW);
        }
        else
        {
            button.setBackground(GRAY);
        }
    }

}
```


----------



## Robat (13. Okt 2016)

Ich liebe so Informationsreiche Posts...
Was bekommst du für eine Fehlermeldung?
Wo bekommst du die Fehlermeldung?
In welchen kontext _mehrmals _Überprüfen?
Was hast du bis jetzt schon versucht?


----------



## sgtpro (13. Okt 2016)

So. Wir sollen also noch eine Variation des Spieles programmieren, indem nicht die Felder daneben, sondern alle Felder, die im Viereck zwischen dem ausgewähltem Feld und dem 1. Feld die Farbe wechseln. so schön so gut.
Beim ersten mal seht ihr die Version, mit dem "daneben umschalten", daneben mein Versuch, es so mit dem Viereck zu machen.

```
// daneben

/*private void updateButtons(int col, int row)
    {

    changeColor(buttons[col][row]);
    if (col > 0) changeColor(buttons[col - 1][row]);
    if (col < cols - 1) changeColor(buttons[col + 1][row]);
    if (row > 0) changeColor(buttons[col][row - 1]);
    if (row < rows - 1) changeColor(buttons[col][row + 1]);

    }
     */






//viereck
    private void viereckZeug(int col, int row)
    {
        int xx = col;
        int y = row;
       

        changeColor(buttons[col][row]);
        //alles links von dem button ändern
        if (col > 0)
            for (int p=col; p>0; p--)
            { changeColor(buttons[col - xx--][row]);

            } 
          
        //alles oben ändern   
        if (row > 0)  
            for (int ö=col; ö>0; ö--)
            { changeColor(buttons[col][row - y--]);
                /*for(int z=col; z>0; z--){
                    changeColor(buttons[col - x--][row]);
                }*/
            }
```
Das letzte auskommentierte, sollte eigentlich das "Viereck" füllen. Aber davor passieren schon einigge dubiose Sachen. Nach oben und links wird nur aufgefüllt, wenn ich mich auf der Diagonalen zwischen dem ersten und dem letzten Feld behebe, Falls ich mich wo anders befinde...naja...... wenn ich mich z.b. unter der diagonalen befinde, werden nach oben die Felder bis zur Diagonalen nicht umgeschalten... usw.
Wo ist denn da die Logik bzw. der Fehler???
Eine helfende Antwort wäre echt geil, bin mittlerweile echt am verzweifeln.


----------



## Mosa (13. Okt 2016)

ok jz hab ich mein problem gelöst, aber sgtpro hats immer no ned


----------

