Java:如何向方法传递动态数量的参数

Java:如何向方法传递动态数量的参数,java,javafx,methods,variadic-functions,Java,Javafx,Methods,Variadic Functions,我正在编写一个JavaFX应用程序,我需要使用其addRow方法将n个TextField对象添加到GridPane中的一行addRow接受任意数量的参数,但它接收的TextField对象的数量不是硬编码的。比如说, GridPane gp = new GridPane(); ArrayList<TextField> tf = new ArrayList<>(); for (int i = 0; i < user_entered_number; i++) {

我正在编写一个JavaFX应用程序,我需要使用其
addRow
方法将n个
TextField
对象添加到
GridPane
中的一行
addRow
接受任意数量的参数,但它接收的
TextField
对象的数量不是硬编码的。比如说,

GridPane gp = new GridPane();
ArrayList<TextField> tf = new ArrayList<>();
for (int i = 0; i < user_entered_number; i++) {
    tf.add(new TextField());
}
gp.addRow(row_index, /* all elements in tf*/);
GridPane gp=new GridPane();
ArrayList tf=新的ArrayList();
for(int i=0;i<用户输入的\u编号;i++){
tf.add(newtextfield());
}
gp.addRow(row_索引,/*tf*/中的所有元素);
我希望使用
allRow
方法将所有生成的
TextField
对象包括在
GridPane
行的
row\u索引中

如果这是可能的,我该怎么做呢?

将获取
int
(行索引)和
节点的varargs。您可以为varargs参数传递一个数组,这样您就可以

gp.addRow(row_index, tf.toArray(new Node[0]));
或者,首先创建一个数组而不是列表:

GridPane gp = new GridPane();
TextField[] tf = new TextField[userEnteredNumber];
for (int i = 0; i < userEnteredNumber; i++) {
    tf[i] = new TextField();
}
gp.addRow(row_index, tf);
GridPane gp=new GridPane();
TextField[]tf=新的TextField[userEnteredNumber];
对于(int i=0;i
采用
int
(行索引)和
节点的varargs。您可以为varargs参数传递一个数组,这样您就可以

gp.addRow(row_index, tf.toArray(new Node[0]));
或者,首先创建一个数组而不是列表:

GridPane gp = new GridPane();
TextField[] tf = new TextField[userEnteredNumber];
for (int i = 0; i < userEnteredNumber; i++) {
    tf[i] = new TextField();
}
gp.addRow(row_index, tf);
GridPane gp=new GridPane();
TextField[]tf=新的TextField[userEnteredNumber];
对于(int i=0;i
我不确定是否正确理解了您的问题。是否要将tf ArrayList中的所有元素作为参数添加到addRow()方法中

addRow()方法将varargs作为参数。您是否尝试将ArrayList转换为array,然后将其传递给该方法

TextField[] arr = new TextField[tf.size()];
arr = tf.toArray(arr);

我不确定我是否正确理解你的问题。是否要将tf ArrayList中的所有元素作为参数添加到addRow()方法中

addRow()方法将varargs作为参数。您是否尝试将ArrayList转换为array,然后将其传递给该方法

TextField[] arr = new TextField[tf.size()];
arr = tf.toArray(arr);

您的意思是想在
网格窗格中的
第0行和
第0列添加say 5
文本字段吗?您的意思是想在
网格窗格中的
第0行和
第0列添加say 5
文本字段吗?它应该是新节点[tf.size()];不0@Flood2d没关系,是吗?如果指定数组的大小小于列表的大小,
toArray()
仍将创建一个新数组。(如果您担心性能等问题,而性能等问题在这里可以忽略不计,那么最好首先创建一个数组。)这会将所有
TextField
对象放在同一个节点还是单独的节点上?也就是说,
tf[0]
会在第一行,第k列,而
tf[1]
会在第一行,第k+1列吗?@jshapy8我不明白“这会把所有
TextField
对象放在同一个节点还是分开的节点?”是什么意思。
TextField
是一个
节点
。它的行为与gp.addRow(rowIndex,tf[0],tf[1],tf[2],…,tf[tf.length-1])完全相同是,每个节点将位于不同的网格单元中。它应该是新节点[tf.size()];不0@Flood2d没关系,是吗?如果指定数组的大小小于列表的大小,
toArray()
仍将创建一个新数组。(如果您担心性能等问题,而性能等问题在这里可以忽略不计,那么最好首先创建一个数组。)这会将所有
TextField
对象放在同一个节点还是单独的节点上?也就是说,
tf[0]
会在第一行,第k列,而
tf[1]
会在第一行,第k+1列吗?@jshapy8我不明白“这会把所有
TextField
对象放在同一个节点还是分开的节点?”是什么意思。
TextField
是一个
节点
。它的行为与gp.addRow(rowIndex,tf[0],tf[1],tf[2],…,tf[tf.length-1])完全相同是,每个节点将位于不同的网格单元中。