Image im Array per Knopfdruck ändern

hasha

Mitglied
Hallo! 🙂

Ich versuche grade das Spiel Vier Gewinnt zu schreiben und habe dafür ein Array aus JLabeln erstellt, in denen am Anfang das Bild1 gespeichert wird, das Array wird dann auf dem Bildschirm angezeigt. So weit so gut..

Jetzt möchte ich aber, dass per Mouseclick Bild2 oder Bild3 in das entsprechende Array geschrieben wird, es tut sich bei mir aber nie was.

Java:
public void mouseClicked(MouseEvent event) {
      taChat.setText("Mouse Clicked: ("+event.getX()+", "+event.getY() +")");
      
      int x = event.getX();
      int y = event.getY();
      
      if (x>250 && x<330 && y>45 && y<480) {
        int i = this.getI(x);
        int j = this.searchJ(i);
        lbFeld[i][j] = new Baustein("yellow.png");
        lbFeld[i][j].setKey(2);
      } // end of if
    }

Eventuell liegt es an der Klasse Baustein? Sie ist eine Unterklasse von JLabel:

Java:
class Baustein extends JLabel
{
  private int key;                         
  
  public Baustein(String pImage){
    super.setIcon(new ImageIcon (pImage));
  }
  
  public void setKey(int pKey){
    key = pKey;
  }
  
  public int getKey(){
    return key;
  }
  
}

Danke im Voraus! 🙂
 
Du weist dem Array ein neues Objekt einer UI Komponente zu. Aber wo fügst du dieses neue Objekt deiner UI hinzu? Bzw. wo entfernst du die alte Komponente?

Anstatt ein neues Objekt zu erzeugen solltest du nur das Icon auf dem bestehenden Objekt ändern.
 
Es nützt dir ja nichts wenn du einen neuen Baustein erzeugst, diesen aber nicht um UI hinzufügst. Das erzeugen eines neuen Labels nur um das Image zu ändern ist aber auch nicht zielführend.

Du solltest statt ein neues Label zu erstellen, einfach nur das Image vom vorhandenen Label ändern.
Dafür könntest du z.b. Eine Methode setImage() in deinen Baustein implementieren.

Gruss

Claus
 
Zuletzt bearbeitet:
Ouh stimmt, so wird das nur im Array selbst gespeichert, aber um es anzeigen zu lassen, muss ich zum Beispiel sowas noch mit reinpacken, oder?

Java:
lbFeld[i][j].setBounds(x,x,x,x);
        contentPane.add(lbFeld[i][j]);

Wie kann ich die alte Komponente denn aus der GUI entfernen bzw. wie kann ich stattdessen einfach nur das Icon ändern? (Sry, falls die Fragen dämlich sind, mach das noch nicht so lange 😀)
 
Zuletzt bearbeitet:
So wie es die Methode "add" gibt um eine neue Komponente hinzu zufügen, gibt es auch eine Methode "remove" um diese wieder zu entfernen. Was du dazu brauchst ist eine Referenz auf diese Komponente.
Diese solltest du aber im Array haben (bevor du den neuen Baustein erstellst).

Wie erstellst du denn das Icon am Anfang? Erstelle es neu und füge es dem JLabel hinzu.

So, habs jetzt so geändert, es klappt jetzt! Herzlichen Dank! 🙂
Es wäre nett du den geänderten Code auch posten würde und nicht nur vermeldest, dass du es gelöst hast.
 
Zuletzt bearbeitet:
Vorher hatte ich es so erstellt:

Java:
for (int i=0;i<7;i++) {
      for (int j=0;j<6;j++) {
        lbFeld[i][j] = new Baustein("empty.png");
        lbFeld[i][j].setKey(0);
        //panelFeld.add(lbFeld[i][j]);
        lbFeld[i][j].setBounds(250 + i*80, 45+j*80, 80, 80);
        contentPane.add(lbFeld[i][j]);
      } // end of for
    } // end of for

public void mouseClicked sieht jetzt so aus:

Java:
public void mouseClicked(MouseEvent event) {
      taChat.setText("Mouse Clicked: ("+event.getX()+", "+event.getY() +")");
      
      int x = event.getX();
      int y = event.getY();
      
      if (x>250 && x<330 && y>45 && y<480) {
        int i = this.getI(x);
        int j = this.searchJ(i);
        lbFeld[i][j].setIcon(new ImageIcon("yellow.png"));
        lbFeld[i][j].setKey(2);
      } // end of if

Habe jetzt einfach das Bild mit der Methode setIcon geändert.

Gruß
hasha
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben