在 Gridpane 中插入一行
Inserting a row into a Gridpane
我正在尝试向网格窗格中插入一行。
我怎样才能做到这一点?
进一步reading/information/effots:
我已经能够用这个附加行:
add.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Peak thisPeak = new Peak();
MenuPeak dispPeak = new MenuPeak(thisPeak);
int row = 1+thisPeak.peakCount();
//psMenu.addRow(1+row);
psMenu.add(dispPeak.name,1,row,1,1);
psMenu.add(dispPeak.retTime,2,row,1,1);
psMenu.add(dispPeak.tol,3,row,1,1);
}
});
我原来的菜单布局来自
到
我试过谷歌搜索,有些人建议使用 addRow。我尝试了几种变体(目前我提供的代码片段中有一个被注释掉了。
这最终只是覆盖了我看到的按钮:
我最终希望它在按钮之间插入一行(hard-coded 峰值线):
也许有更好的解决方案,但我再次通过 re-adding 元素按钮找到了一些成功,但这会产生一些 运行 时间错误但是否有效?
add.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Peak thisPeak = new Peak();
MenuPeak dispPeak = new MenuPeak(thisPeak);
int row = thisPeak.peakCount();
psMenu.addRow(1+row);
psMenu.add(dispPeak.name,1,row,1,1);
psMenu.add(dispPeak.retTime,2,row,1,1);
psMenu.add(dispPeak.tol,3,row,1,1);
row++;
psMenu.add(save,1,row,1,1);
psMenu.add(cancel,2,row,1,1);
psMenu.add(okay,3,row,1,1);
}
});
是什么造就了这个
但是,运行 时间错误再次抱怨添加重复 children。
Exception in thread "JavaFX Application Thread"
java.lang.IllegalArgumentExcepti on: Children: duplicate children
added: parent = Grid hgap=10.0, vgap=10.0, alig nment=TOP_CENTER
at javafx.scene.Parent.onProposedChange(Parent.java:454)
at com.sun.javafx.collections.VetoableListDecorator.add(VetoableListDeco
rator.java:206)
编辑:答案正确,我更正的具体实施是:
add.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Peak thisPeak = new Peak();
MenuPeak dispPeak = new MenuPeak(thisPeak);
int row = 1+thisPeak.peakCount();
psMenu.setRowIndex(save,row);
psMenu.setRowIndex(cancel,row);
psMenu.setRowIndex(okay,row);
psMenu.addRow(row-1, dispPeak.name, dispPeak.retTime, dispPeak.tol);
}
});
您正在添加保存、取消和确定按钮,尽管它们已经是 GridPane
的 children。而只是调整那些 children 的行。此外 addRow
将节点添加到行中。它不会 "insert" 一个新行。如果您不将任何节点传递给 varargs 参数,该方法将不执行任何操作(如果您在第一列中开始峰值的 Node
s,您可以使用 psMenu.addRow(row, dispPeak.name, dispPeak.retTime, dispPeak.tol);
):
@Override
public void handle(ActionEvent event) {
Peak thisPeak = new Peak();
MenuPeak dispPeak = new MenuPeak(thisPeak);
int row = thisPeak.peakCount();
// add new nodes
psMenu.add(dispPeak.name,1,row);
psMenu.add(dispPeak.retTime,2,row);
psMenu.add(dispPeak.tol,3,row);
row++;
// adjust row of buttons
GridPane.setRowIndex(save, row);
GridPane.setRowIndex(cancel, row);
GridPane.setRowIndex(okay, row);
}
我正在尝试向网格窗格中插入一行。
我怎样才能做到这一点?
进一步reading/information/effots:
我已经能够用这个附加行:
add.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Peak thisPeak = new Peak();
MenuPeak dispPeak = new MenuPeak(thisPeak);
int row = 1+thisPeak.peakCount();
//psMenu.addRow(1+row);
psMenu.add(dispPeak.name,1,row,1,1);
psMenu.add(dispPeak.retTime,2,row,1,1);
psMenu.add(dispPeak.tol,3,row,1,1);
}
});
我原来的菜单布局来自
到
我试过谷歌搜索,有些人建议使用 addRow。我尝试了几种变体(目前我提供的代码片段中有一个被注释掉了。
这最终只是覆盖了我看到的按钮:
我最终希望它在按钮之间插入一行(hard-coded 峰值线):
也许有更好的解决方案,但我再次通过 re-adding 元素按钮找到了一些成功,但这会产生一些 运行 时间错误但是否有效?
add.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Peak thisPeak = new Peak();
MenuPeak dispPeak = new MenuPeak(thisPeak);
int row = thisPeak.peakCount();
psMenu.addRow(1+row);
psMenu.add(dispPeak.name,1,row,1,1);
psMenu.add(dispPeak.retTime,2,row,1,1);
psMenu.add(dispPeak.tol,3,row,1,1);
row++;
psMenu.add(save,1,row,1,1);
psMenu.add(cancel,2,row,1,1);
psMenu.add(okay,3,row,1,1);
}
});
是什么造就了这个
但是,运行 时间错误再次抱怨添加重复 children。
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentExcepti on: Children: duplicate children added: parent = Grid hgap=10.0, vgap=10.0, alig nment=TOP_CENTER at javafx.scene.Parent.onProposedChange(Parent.java:454) at com.sun.javafx.collections.VetoableListDecorator.add(VetoableListDeco rator.java:206)
编辑:答案正确,我更正的具体实施是:
add.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Peak thisPeak = new Peak();
MenuPeak dispPeak = new MenuPeak(thisPeak);
int row = 1+thisPeak.peakCount();
psMenu.setRowIndex(save,row);
psMenu.setRowIndex(cancel,row);
psMenu.setRowIndex(okay,row);
psMenu.addRow(row-1, dispPeak.name, dispPeak.retTime, dispPeak.tol);
}
});
您正在添加保存、取消和确定按钮,尽管它们已经是 GridPane
的 children。而只是调整那些 children 的行。此外 addRow
将节点添加到行中。它不会 "insert" 一个新行。如果您不将任何节点传递给 varargs 参数,该方法将不执行任何操作(如果您在第一列中开始峰值的 Node
s,您可以使用 psMenu.addRow(row, dispPeak.name, dispPeak.retTime, dispPeak.tol);
):
@Override
public void handle(ActionEvent event) {
Peak thisPeak = new Peak();
MenuPeak dispPeak = new MenuPeak(thisPeak);
int row = thisPeak.peakCount();
// add new nodes
psMenu.add(dispPeak.name,1,row);
psMenu.add(dispPeak.retTime,2,row);
psMenu.add(dispPeak.tol,3,row);
row++;
// adjust row of buttons
GridPane.setRowIndex(save, row);
GridPane.setRowIndex(cancel, row);
GridPane.setRowIndex(okay, row);
}