Buttons Halma-Spiel

Optimus_Prime

Grünschnabel
[moderator]In Bezug auf: http://www.tutorials.de/forum/java/245440-button-array-minesweeper.html?highlight=minesweeper[/moderator]

hallo zusammen,

ich habe ein ähliches problem und bin möglicherweise ein noch größerer anfänger und schaffe es deshalb nicht die oben geschriebenen instruktionen in die tat umzusetzten.
Mein Problem:
ich habe ein btnFeld[8][25] und ich möchte dass wenn ich auf einen dieser Buttons klicke die Koordinaten ausgegeben werden.
 
Zuletzt bearbeitet von einem Moderator:
Das ist nun wirklich kein Kunststück...

Java:
btnFeld[8][25].addActionListener(new ActionListener() {
	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println(((JButton)e.getSource()).getLocation());
	}					
});
 
Wenn ich das kopiere und einfüge bekomme ich 18 errors.
ich wäre dir sehr dankbar wenn es ein wenig genauer gehen würde. vllt habe ich mich aber auch ein wenig undeutlich ausgedrückt.
also nochmal

ich habe das btnFeld[8][25] welches sich erstellt sobald das programm ausgeführt wird. und dann möchte ich die x und y koordinaten des btnFeld ausgeben, wenn ich auf einen dieser buttons klicke.
muss ich noch iwas importen? und wo muss ich deinen code hinkopieren?
 
Hi,
welche Errors bekommst du den so?
Diesen Quellcode musst du an jeden Button hängen, den du in deinem Feld verwendest.
Du musst natürlich ActionListener, ActionEvent und Jbutton importieren.
So sieht der Code aus, in dem die Buttons hinzu gefügt werden:
Java:
ActionListener listener = new ActionListener(){
     //Hier bitte den Code von Zeile 2-5 von Akeshihiro reinkopieren
  };
JButton[][] btnField = new JButton[8][25]
for(int  i = 0; i<8; i++){
 for(int s = 0; s<25, s++){
  JButton b = new JButton(),
  b.addActionListener(listener);
  btnField[i][s]  = b;
 }
}
Code ist nicht getestet!

Ich hoffe, ich habe alles richtig verstanden.
Ciao
DosCoder
 
das problem ist jetzt nur dass ich ja an die 200 buttons hab von denen jeder das gleiche machen soll
kann ich das nicht iwie zusammen fassen?

also so ungefähr:
Code:
public void btnFeld[x][y]_ActionPerformed(ActionEvent evt) {

aber das funktioniert nicht, wie mach ich das?
 
Hi,
ich weiß jetzt nicht, was dein Problem ist.
Dank der Schleife ist es egal, ob du 2, 200 oder 2000 Butons hast. Und der Listener ist eh immer derselbe, er wird ja auch nur einmal definiert. Und die außere Schleife führt 8 mal die innere aus, welche die Anweisungen 25 ausführt => 8 * 25 = 200. Es passt doch alles.

Ciao
DosCoder
 
das heißt dann ja ich muss es an 200 buttons hängen ...

Hi,
welche Errors bekommst du den so?
Diesen Quellcode musst du an jeden Button hängen, den du in deinem Feld verwendest.
Du musst natürlich ActionListener, ActionEvent und Jbutton importieren.
So sieht der Code aus, in dem die Buttons hinzu gefügt werden:
Java:
ActionListener listener = new ActionListener(){
     //Hier bitte den Code von Zeile 2-5 von Akeshihiro reinkopieren
  };
JButton[][] btnField = new JButton[8][25]
for(int  i = 0; i<8; i++){
 for(int s = 0; s<25, s++){
  JButton b = new JButton(),
  b.addActionListener(listener);
  btnField[i][s]  = b;
 }
}
Code ist nicht getestet!

Ich hoffe, ich habe alles richtig verstanden.
Ciao
DosCoder

Das machst du doch nicht von Hand 200 mal xD Dafür ist die Schleife da, wie DosCoder schon gezeigt hat.

Sorry für die Frage, aber warum fängst du mit GUI-Programmierung an, wenn du nicht mal die grundlegensten Grundlagen kannst?
 
ok ich schreib jetzt einfach mal mein Quelltext der GUI hier rein und ihr sagt mir dann wo was hin muss in ordnung?
enweder steh ich extrem auf dem schlauch oder wir reden einfach die ganze zeit aneinander vorbei

dazu sollte ich vllt noch sagen dass ich dabei bin halma zu programmieren (für die schule). in der for-schleife werden die ganzen buttons erstellt und dann aussortiert welche gebraucht werden und welche nicht (wer ein halma feld kennt weiß möglicherweise wovon ich rede)
im anhang ist noch ein bild des spielfeldes.

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 22.04.2009
  * @author
  */

public class HalmaGUI extends JFrame {
  // Anfang Variablen
  // Anfang Attribute
  private Steuerung dieSteuerung;
  private JButton[][] btnFeld = new JButton[9][25];
  private ImageIcon schwarz = new ImageIcon("schwarzerPunkt.gif");
  private ImageIcon rot = new ImageIcon("roterPunkt.gif");
  private ImageIcon blau = new ImageIcon("blauerPunkt.gif");
  private ImageIcon weiß = new ImageIcon("weißerPunkt.gif");
  private ImageIcon hrot = new ImageIcon("hellroterPunkt.gif");
  private ImageIcon hblau = new ImageIcon("hellblauerPunkt.gif");
  // Ende Attribute
  // Ende Variablen

  public HalmaGUI(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    int frameWidth = 793;
    int frameHeight = 810;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int px = (d.width - getSize().width) / 2;
    int py = (d.height - getSize().height) / 2;
    setLocation(px, py);
    Panel cp = new Panel(null);
    add(cp);
    // Anfang Komponenten


    for (int x=0; x<9; x++) {
      for (int y=0; y<25 ; y++ ) {
        btnFeld[x][y]=new JButton();
        btnFeld[x][y].setBounds(10+x*55,10+y*30,30,30);
        btnFeld[x][y].setText("");
        btnFeld[x][y].setToolTipText("");
        btnFeld[x][y].setActionCommand(""+(x+y*8));
        cp.add(btnFeld[x][y]);
        
                if(x==0 && y%2!=0){                     //nicht belegte Felder im
                  btnFeld[x][y].setVisible(false);      //Spielfeld
                }
                if(x==1 && y>1 && y<23 && y%2==0){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==2 && y>2 && y<22 && y%2!=0){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==3 && y>3 && y<21 && y%2==0){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==4 && y>4 && y<20 && y%2!=0){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==5 && y>3 && y<21 && y%2==0){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==6 && y>2 && y<22 && y%2!=0){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==7 && y>1 && y<23 && y%2==0){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==8 && y%2!=0){
                  btnFeld[x][y].setVisible(false);
                }

                if(x==4 && y<4){                      //nicht belegte Felder oberhalb
                  btnFeld[x][y].setVisible(false);    //des Hofs
                }
                if(x==3 && y<3){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==5 && y<3){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==2 && y<2){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==6 && y<2){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==1 && y==0){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==7 && y==0){
                  btnFeld[x][y].setVisible(false);
                }

                if(x==4 && y>20){                    //nicht belegte Felder unterhalb
                  btnFeld[x][y].setVisible(false);   //des Hofs
                }
                if(x==3 && y>21){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==5 && y>21){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==2 && y>22){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==6 && y>22){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==1 && y==24){
                  btnFeld[x][y].setVisible(false);
                }
                if(x==7 && y==24){
                  btnFeld[x][y].setVisible(false);
                }
                

      }
    }
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
    dieSteuerung=new Steuerung(this);
  }
  

  // Anfang Methoden
  public void aktualisiereGUI(int pX, int pY, int pValue) {
     if (pValue == 0) btnFeld[pX][pY].setIcon(weiß);
     if (pValue == 1) btnFeld[pX][pY].setIcon(rot);
     if (pValue == 2) btnFeld[pX][pY].setIcon(blau);
     if (pValue == 3) btnFeld[pX][pY].setIcon(hrot);
     if (pValue == 4) btnFeld[pX][pY].setIcon(hblau);
  }




  // Anfang Ereignisprozeduren
  

  // Ende Ereignisprozeduren
  // Ende Methoden

  public static void main(String[] args) {
    new HalmaGUI("HalmaGUI");
  }
}
 

Anhänge

  • halma.jpg
    halma.jpg
    64,5 KB · Aufrufe: 42
Zuletzt bearbeitet:
Hi,
da hast du doch schon eine Schleife. Nun noch oberhalb dieser die Implementiation des Listeners machen, und in die Schleife dann meinen Schleifeninhalt transferieren.

Wenn du keinen Text auf den Buttons ahben willst, dann ist der Aufruf von setText() sinnlos. Das gleiche gilt für setToolTip().

Außerdem würde ich noch mal über die Art deiner Butonauswahl nachdenken die ist nämlich nicht gerade hübsch. Schreib doch einfach ne Liste mit den Koordinaten die du (nicht) brauchst und prüfe dann bei jedem Button, ob er dazu gehöhrt.

Ciao
DosCoder
 

Neue Beiträge

Zurück