2016-02-19 30 views
1

我現在正面臨一個問題,我認爲我的主要是一遍又一遍地執行一個方法,而不是一次。如果我按照一個例子解釋它,它會更好。我已經能夠編制一個掃雷遊戲。但是我把它全部寫在一個班級MAIN中。這次我正在嘗試再次使用方法和類,爲了實踐和更好的概述。 正如您所看到的,在我的類計算中,我正在嘗試創建一個標籤數組。在我的主要我試圖從GridPane中的數組添加所有的標籤。由於這是一個掃雷遊戲,我必須添加隨機炸彈,在我的例子中這將是「X」。我做了這個小測試,如果它工作lbs [10] .setText(「x」),只是爲了看看它是否工作。它沒有。一旦這個方法被調用,它將把所有標籤的文本設置爲X!我也想在這個類中設置一個onMouseClicked事件。我將不勝感激任何幫助,並感謝您抽出時間閱讀本文。我包圍了代碼與#標籤 - > ######調用方法(掃雷)的問題

//Main 
package application; 

import... 


public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     try { 
      GridPane grid = new GridPane(); 

      Scene scene = new Scene(grid, (20 * 20), (20 * 20)); 
      scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 
      primaryStage.setScene(scene); 
      primaryStage.show();  

      for(int i = 0; i < 20; i++) { 
       ColumnConstraints column = new ColumnConstraints(20); 
       grid.getColumnConstraints().add(column); 
       } 

      for(int i = 0; i < 20; i++) { 
       RowConstraints row = new RowConstraints(20); 
       grid.getRowConstraints().add(row); 
      } 
      //######################################################### 
      Calculations c = new Calculations(); 
      int count = 0; 
      for (int x = 0; x < c.test().length/20; x++) 
       { 
        for (int y = 0; y < c.test().length/20; y++) 
         { 
          grid.add(c.test()[count], x, y); 
          count++; 
         } 
       } 
     //######################################################### 

       } catch(Exception e) { 
      e.printStackTrace(); 

     } 


    } 



    public static void main(String[] args) { 
     launch(args); 
    } 
    } 

在這裏,我的課「計算」

package application; 

import... 

public class Calculations { 

    public Label[] test() { 

     Label label = new Label(); 
     Label lbs[] = new Label[20*20]; 
     int a = 0; 
     for (int i = 0 ; i < 400; i++) { 
     lbs[i] = label; 
     } 

lbs[10].setText("x"); //##### <- doesnt work the way it should be 

     return lbs; 


} 
} 

回答

1

這是因爲在陣列lbs點的所有元素,以相同的標籤label

因此,當您將任何一個文本設置爲"x"時,它會更改label的文本,即實際上每個標籤。

改變這一行,在循環:

lbs[i] = label; 

到:

lbs[i] = new Label(); 
+0

謝謝SOOO了!這種簡單的錯誤讓我忙了好幾天!你是否也知道如何在類Calculations中放置一個onMouseClicked事件?我想,讓我們說,每當我點擊一個標籤,應該發生什麼事情。可以說標籤文字是「X」?我嘗試了很多方法。最近我把它放在For循環代碼中,但它不起作用:lbs [i] .setOnMouseClicked(e - > {label.setText(「X」);}); – dahood