当前位置: 首页 > 知识库问答 >
问题:

JavaFX随机化gridpane约束

李烨烁
2023-03-14

目前,我已将数字按特定顺序排列。我怎么能把这个随机化呢?例如,每次单击按钮时,我希望每个按钮都更改按钮的所有位置。问题是GridPane可以将节点堆叠在一个地方,使得按钮相互隐藏。有没有办法设置节点不能堆栈?

另一方面,我从一个帖子中找到了一个方法,有人想要切换两个按钮的位置。代码如下所示:

public static void swap(Node button1, Node button2) {
    Integer temp = GridPane.getRowIndex(button1);
    GridPane.setRowIndex(button1, GridPane.getRowIndex(button2));
    GridPane.setRowIndex(button2, temp);

    temp = GridPane.getColumnIndex(button1);
    GridPane.setColumnIndex(button1, GridPane.getColumnIndex(button2));
    GridPane.setColumnIndex(button2, temp);

}

我尝试创建一个包含节点的arraylist,然后使用Math.random从arraylist中获取一个随机索引,然后得到一个随机按钮。

public static ArrayList<Node> buttonList = new ArrayList<Node>();

和随机化索引的代码:

public static int maxListValue = 19;
public static int minListValue = 0;
public static int listRandom = (int) (Math.random() * maxListValue) + minListValue;

然后,使用交换方法,我尝试:

swap(buttonList.get(listRandom), buttonList.get(listRandom));

由于某种原因,这不起作用,当我在第一个节点上放置random时,按钮不起作用,但是,如果我更改它来指定第一个节点,例如:swap(buttonOne,ButtonList.Get(listRandom));,那么它起作用,但是为多个按钮调用方法不起作用,它只在方法的第一行起作用。

共有1个答案

秦俊发
2023-03-14

您需要在调用arraylist之后从它中删除所选的位置,然后重新计算它ListRandom。你可以这样做:

public static Node listRandom() {
    Node place = buttonList.get(new Random().nextInt(buttonList.size());
    buttonList.remove(place);
    return place;
}

或者如果您不想删除该条目以便可以多次交换某个位置:

public static Node listRandom() {
    return buttonList.get(new Random().nextInt(buttonList.size());
}

然后您可以使用以下命令调用它:

swap(listRandom(), listRandom());
 类似资料:
  • 有没有办法将列约束应用于我的所有网格窗格列。我有各种 GridPane 控件,我希望它们共享以下列的约束: 使用css能做到吗? 编辑 我最终做了这样的事情。但它不起作用(我的列宽调整到74以下),任何线索?

  • 问题内容: 我正在创建一个应用程序,该应用程序在gridPane的每个单元格内随机显示(不同颜色的)圆圈。 我想要做的是创建一个“随机播放”按钮,以随机更改gridPane中每个圆的位置。但是,我一直遇到很多问题。 这是我到目前为止所拥有的。我的两个类(尚未添加XML文件): 控制器类 主班 问题答案: 这是一个示例,演示了如何在。如果添加了一个,你可以删除从。然后,您可以随机播放。最后,您可以将

  • 主要内容:示例,示例2GridPane通常用于布局:第一列上的只读标签的输入表单和第二列上的输入字段。 GridPane可以在行,列或单元格级别指定约束。 例如,我们可以设置包含输入文本字段的第二列,以在窗口调整大小时调整大小。 示例 以下代码演示使用GridPane布局的简单表单应用程序。它有以下布局。 完整的代码实现如下所示 - 上面的代码生成以下结果。 示例2 以下是一个实现登录窗口的代码 - 上面的代码生成以下

  • 嗨,我目前正在玩JavaFX中的GridPane,偶然发现了一个问题...我想创建一个包含三行的布局,其中中间一行增长并占用所有可用空间,但我就是无法让它工作。中间行变得太大,并将窗口下方的底部行“推”到不再可见的位置...我如何使底部行始终在底部,让中间行占用中间的可用空间,但不能再这样了...我将在下面粘贴我的代码。 谢啦! (注意:为清晰起见,代码略有改动,但工作方式相同) 更新!添加“最小

  • 问题:我混淆了vbox和gridpane。。通常,当您可以使用vbox时,您也可以使用包含1列和n行的gridPane,因此我不确定何时使用每一列和它们之间的差异。 事实: > 我知道网格窗格有n行和n列。 我知道vbox只会垂直列出组件。(n行1列) 困惑:当我想垂直列出40-50个(水平框或其他组件)时,我不知道应该选择哪一个,因为有时我会看到人们将这些组件作为子组件添加到vbox中,而其他人

  • 有时,计算结果不可预测会很有趣。 徽标提供随机程序以生成随机数。 它有一个参数并产生一个随机均匀选择的整数值,该值大于或等于0且小于其参数的值。 因此,如果您想要一个0到359度之间的随机角度,您可以使用命令random 360来生成它。 请记住,除非您对结果执行某些操作(例如打印),否则徽标将显示错误。 让我们看看下面的例子 - 我们发出了命令 - 在上面的命令窗口中多次print random