调用方法的问题(扫雷)

时间:2016-02-19 12:22:18

标签: java arrays methods javafx gridpane

我现在正面临一个问题,我认为我的主要是一遍又一遍地执行一个方法,而不是一次。如果我根据一个例子解释它会更好。我已经能够编写一个扫雷游戏了。但我把它全部写在一个MAIN课程中。这次我试图再次使用方法和类,为了练习和更好的概述。 如您所见,在我的类计算中,我正在尝试创建一个标签数组。在我的Main我试图在GridPane中添加Array中的所有标签。由于它是一个扫雷游戏,我必须添加随机炸弹,在我的例子中将是“X”。我做了这个小测试,如果它工作lbs [10] .setText(“x”),只是为了看它是否有效。它没有。调用此方法后,它会将所有标签的文本设置为X!我还想在这个类中设置一个onMouseClicked事件。我将不胜感激任何帮助,感谢您抽出时间阅读本文。我用Hashtag包围了代码 - > ######

//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 个答案:

答案 0 :(得分:1)

这是因为数组public Dictionary<Guid, string> GetCitizensWithUnwarrentedAbsence(Guid counselorId, DateTime date) { var now = DateTime.Now; var startInterval = Convert.ToDateTime(date.Date.ToShortDateString()); var endInterval = Convert.ToDateTime(date.Date.ToShortDateString()).AddHours(23).AddMinutes(59); var list = (from c in _context.CitizenCounselorSet join p in _context.ActivityLessonParticipantSet on c.Citizen.Id equals p.UserId where c.CounselorId == counselorId && c.StartDate < now && (c.EndDate == null || (c.EndDate.HasValue && c.EndDate.Value > now)) && p.WasUnwarrantedAbsent && !p.ActivityLesson.IsDeleted && !p.ActivityLesson.IsCancelled && p.ActivityLesson.From >= startInterval && p.ActivityLesson.From <= endInterval select new { UserId = p.UserId, UserName = p.User.FullName, CPR = p.User.UserName }).ToList().Select(a => new KeyValuePair<Guid, string>(a.UserId, a.UserName + " (" + EncryptionUtility.DecryptString(a.CPR).Insert(6, "-") + ")")); return list.ToDictionary(pair => pair.Key, pair => pair.Value); } 中的所有元素都指向相同的标签lbs

因此,当您将任何一个文本设置为label时,它会更改"x"的文本,实际上是每个标签。

在循环中更改此行:

label

为:

lbs[i] = label;