java - 标签二维数组 | JavaFX

标签 java multidimensional-array javafx label

我想用 Javafx 标签填充 2D 数组,单击它时可以更改其中的文本。 这是我的实际代码,但它返回 NullPointer 异常。

Blockquote

`public static Label[][] initWelt() {
    Label[][] welt = new Label[DIM1][DIM2];
    for (int x = 1; x < welt.length - 1; x++) {
        for (int y = 1; y < welt.length - 1; y++) {
            if (Math.random() > 0.4) {
                welt[x][y].setText("X");
            }
            else{
                welt[x][y].setText(" ");
            }
        }
    }
    return welt;
}`

最佳答案

it's returning a NullPointer Exception.

下面的代码唯一做的就是初始化一个二维数组,它不会填充二维数组,因此会出现NullPointerException 发生。

Label[][] welt = new Label[DIM1][DIM2];

基本上你不能这样称呼:

welt[x][y].setText("X");

无需使用对象引用填充二维数组。

要解决这个问题,首先填充二维数组,如下所示:

Label[][] welt = new Label[DIM1][DIM2];
for(int i = 0; i < DIM1; i++){
   for(int j = 0; j < DIM2; j++){
       welt[i][j] = new Label();
   }
}

然后您就可以继续当前手头的任务。

所以现在你的代码变成这样:

public static Label[][] initWelt() {

    Label[][] welt = new Label[DIM1][DIM2];

    for(int i = 0; i < DIM1; i++){   //populate the array
        for(int j = 0; j < DIM2; j++){
            welt[i][j] = new Label();
        }
    }

    for (int x = 0; x < DIM1; x++) {
        for (int y = 0; y < DIM2; y++) {
            if (Math.random() > 0.4) {
                welt[x][y].setText("X");
            }
            else{
                welt[x][y].setText(" ");
            }
        }
    }
    return welt;
}

注意 - 我个人认为最好重构当前方法并在不同的方法中插入填充二维数组的代码。

关于java - 标签二维数组 | JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42928087/

相关文章:

java - 检查是否存在与模式匹配的文件

JavaFX 仅当它们是 :enabled 时才将 css 应用于 TableRows

java - 通过套接字发送javafx矩形/ Pane

java - Google 日历 API 未收到确认响应

java hashmap查询

java - 如何使我的 Android 可刷卡 CardView 更像 IOS 7 邮件应用程序(滑动以显示按钮)

c - C 中参数的顺序

php - 通过 POST 发送现有的多维数组

C++:二维静态 map 的初始化

JavaFX 11 : IllegalAccessError when creating Label