2016-07-30 15 views
0

Ich habe ein 10 mal 10 Array von Jpanels erstellt und muss ein Quadrat daraus entfernen. Das Quadrat, das angeklickt wird, muss entfernt werden, ebenso wie alle Quadrate darunter und rechts davon. Derzeit, wenn ich auf ein Quadrat klicke, löscht es nur ein Quadrat. http://imgur.com/a/6wZYA - so sieht das Raster aus und dann das gewünschte Ergebnis. Anbei unten ist der Code, den ich gerade verwende. Jede Hilfe ist willkommen. Bitte lassen Sie mich wissen, wenn ich noch mehr Code anhängen muss, danke.Entfernen von Panels aus einem Array

for (int x = 0; x < 10; x++) { 
     playingGrid[x] = new JPanel[10]; 
     for (int y = 0; y < 10; y++) { 
      playingGrid[x][y] = new JPanel(); 
      playingGrid[x][y]= new ImagePanel(Toolkit.getDefaultToolkit() 
            .getImage("rock.jpg")); 
      pcenter.add(playingGrid[x][y]); 
      playingGrid[x][y].addMouseListener(new Rockbreaker()); 
     } 

    } 
    f.getContentPane().add(pcenter, BorderLayout.CENTER); 

} 
public class Rockbreaker implements MouseListener{ 

    public void mouseClicked(MouseEvent e) { 
     //sets all columns greater than one clicked to invisible 
     for (int x = 0; x < 10; x++) { 
      for (int y = 0; y < 10; y++) { 
       if(playingGrid[x][y]== e.getSource()){     
         for (int c=0;c<100;c++){ 
          if(c>x){ 
           playingGrid[x][y].setVisible(false); 
          } 
         } 
+2

Ich habe Ihr JavaScript-Tag gelöscht, da Ihre Frage damit nichts zu tun hat Sprache und haben das Swing-Tag hinzugefügt, da Ihre Frage alles mit dieser Bibliothek zu tun hat. Aber was Ihre eigentliche Frage angeht, vielleicht bin ich es, aber ich habe keine Ahnung, was Sie zu tun versuchen oder welches Problem Sie bei Ihrem Versuch haben. Wenn Sie bald keine vernünftige Antwort erhalten, sollten Sie ernsthaft darüber nachdenken, diese Frage zu verbessern, einschließlich der Veröffentlichung relevanterer und besser erklärter Details und eines [mcve] -konformen Codepostings. –

+0

Warum weisen Sie Ihrem Gitternetz ein neues JPanel zu, 'playingGrid [x] [y]', und dann dieses JPanel-Objekt sofort verwerfen und ein völlig anderes Objekt, ein ImagePanel, demselben Raster zuordnen? Das macht keinen Sinn. –

+0

Wenn dies mein Projekt wäre, würde ich wahrscheinlich die Sichtbarkeit der JPanels in meinem Grid nicht ändern, da dies das Layout aller sichtbaren Komponenten im Grid durcheinander bringen könnte, stattdessen aber wahrscheinlich ein Raster von JLabel und würde einfach die Icons tauschen, die die Labels angezeigt haben. –

Antwort

0

Es gibt einen Fehler in Ihrer Logik. Ich bin mir nicht sicher, was Sie im if (c> x) -Block tun wollten, aber Sie könnten es einfach in

konvertieren
public void mouseClicked(MouseEvent e) { 
    int selectedX = -1; 
    int selectedY = -1; 
    for (int x = 0; x < 10; x++) { 
     for (int y = 0; y < 10; y++) { 
      if(playingGrid[x][y]== e.getSource()){ 
       playingGrid[x][y].setVisible(false); 
       selectedX = x; 
       selectedY = y; 
      } else if (selectedX > 0 && selectedY > 0 && selectedX <= x && selectedY <= y) { 
       playingGrid[x][y].setVisible(false); 
      } 
     } 
    } 
}