# Buttons neu zeichnen im GridLayout



## EDJA (17. Mai 2017)

Guten Tag,
bin gerade dabei ein Spiel zu programmieren.
Als Oberfläche hab ich ein GridLayout gewählt, dieses beinhaltet Buttons. Diese Buttons sollen die einzelnen Spielfelder darstellen.

Die Struktur wird durch ein zwei Dim. Array erstellt:

gameGrid= new int[][]
                    {{3,0,0,0,0,1,0,0,0,2,2,2,2,2,2,2,2,2,2,2},
                     {2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2},
                     {2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2},
                     {2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2},
                     {2,2,2,2,2,2,2,2,0,1,0,0,0,0,0,0,0,2,2,2},
                     {2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,1,0,0,0},
                     {2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0},
                     {2,2,0,2,2,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0},
                     {2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
                     {2,2,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,1,2,2},
                     {2,2,1,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,2,2},
                     {2,2,0,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,2,2},
                     {2,2,0,2,2,2,1,0,0,0,1,0,2,2,2,2,2,0,2,2},
                     {2,2,0,2,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,2},
                     {2,2,0,2,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,2},
                     {2,2,0,1,0,0,0,2,2,2,2,2,2,2,2,0,0,0,2,2},
                     {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2},
                     {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2},
                     {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1,2,2},
                     {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,4}};

Diese Struktur wird später dann dem Layout zugeordnet.

gamefield = gameGrid.createGameGrid();
pnlGame.setLayout(new GridLayout(gamefield.length,gamefield.length,0,0));

Beim durchlaufen des Arrays wird anhand der Werte das Image der Buttons "geladen".
for (int zeile=0;zeile<gamefield.length;zeile++)
        {
            for (int spalte=0;spalte<gamefield.length;spalte++)
            {
                if (gamefield[zeile][spalte]==0)
                {
                    JButton button = new BlauFeld();
                    //buttons.add(button);
                    pnlGame.add(button);


                }

                if (gamefield[zeile][spalte]==1)
                {
                    JButton button = new RotFeld();
                    //buttons.add(button);
                    pnlGame.add(button);

                }
                if (gamefield[zeile][spalte]==2)
                {
                    JButton button = new GrasFeld(); 
                    //buttons.add(button);
                    pnlGame.add(button);

                }
                if (gamefield[zeile][spalte]==3)
                {
                    JButton button = new StartFeld();
                    button.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e)
                        {
                            drawPlayersStartPosition(button);
                            button.setText("YES");
                        }
                    });
                    //buttons.add(button);
                    button.action(null, null);
                    pnlGame.add(button);

                }
                if (gamefield[zeile][spalte]==4)
                {
                    JButton button = new ZielFeld();
                    //buttons.add(button);
                    pnlGame.add(button);
                }


die Frage ist nun wie realisier ich es das z.b beim Start des Spiels. Die Spielfiguren(sollen gezeichnete Kreise sein) sich auf den Buttons abzeichnen.





Hat da jemand eine Idee


----------



## MBadzura (18. Mai 2017)

Muss es gezeichnet sein, oder reicht es nicht, einfach ein Icon uff die Buttons zu setzen?


----------



## Robat (18. Mai 2017)

Wenn es wirklich gezeichnet werden soll kannst du dir eine eigene Button Klasse erstellen die von JButton erbt und dort die #paintComponent(Graphics) Methode überschreiben. Dort kannst du dann Kreise zeichnen lassen (oder was auch immer )

Solltest du die Kreise/Images als Bilder parat haben reicht es auch ein Icon für den Button mittels #setIcon() zu setzen.

Gruß Robert


----------

