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

如何在JavaFX中将标签迭代添加到GridPane?

沃威
2023-03-14

我正在尝试使用for循环在JavaFX中迭代地向GridPane添加标签,但当我尝试启动应用程序时,我一直收到错误。控制台输出是:

Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$1(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: Children: duplicate children added: parent = Grid hgap=10.0, vgap=10.0, alignment=TOP_CENTER
    at javafx.scene.Parent$2.onProposedChange(Parent.java:454)
    at com.sun.javafx.collections.VetoableListDecorator.add(VetoableListDecorator.java:206)
    at javafx.scene.layout.GridPane.add(GridPane.java:965)
    at com.comsci.drt.ProjectGUI.start(ProjectGUI.java:181)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$5(GtkApplication.java:139)

我是这方面的初学者,但我明白它告诉我,我正在尝试放置一个已经放置的物体。

代码:

Label l = new Label();
for(int i = 2; i <= 3; i++) {
    l.setText(finalResultsArray[i].getTeamName());   <-- line 181
    pane1.add(l, 0, i);
}

然后我继续使用一个标签数组,我相信它不会试图替换一个已经放置的对象,但是我收到了另一个错误:

Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$1(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
    at com.comsci.drt.ProjectGUI.start(ProjectGUI.java:175)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$5(GtkApplication.java:139)

代码:

Label[] label = new Label[12];
for(int i = 0; i < 12; i++) {
    for(int j = 0; j < 1; j++) {
        label[i].setText(finalResultsArray[i].getTeamName());
        pane1.add(label[i], 0, i);
    }
}

共有2个答案

能向晨
2023-03-14

您需要为每个标签调用一个构造函数。对于您的第一个片段,只需在循环中移动“new Label”调用。

佘修为
2023-03-14

每次想要向网格中添加文本时,都需要使用一个新的< code>Label实例。此外,新创建的数组用< code>null值填充。

因此,使这项工作成为可能的方法是

for(int i = 2; i <= 3; i++) {
    Label l = new Label();
    l.setText(finalResultsArray[i].getTeamName());
    pane1.add(l, 0, i);
}

Label[] label = new Label[12];
for(int i = 0; i < 12; i++) {
    label[i] = new Label();
    label[i].setText(finalResultsArray[i].getTeamName());
    pane1.add(label[i], 0, i);
}
 类似资料:
  • 我试图将ActionListener添加到一个标签中,每当用户键入错误的密码或登录时,该标签就会弹出。这是我的登录控制器 我如何能够解决这个问题?我已经尝试了很多次(setOnAction, addMouseListener),但都不起作用:(。 如果你不介意的话,我还想问一下public void initialize函数。这是干什么用的?当我创建类时,它会自动弹出。 提前感谢

  • 我有一个问题,我真的不知道如何在JavaFX中将多行添加到Label中。 例如: 因此,当循环结束时,标签仅显示最终值9。 因此,任何可以显示所有数字1-9并在它们之间加上断线(例如'\n')的解。 当我想显示包含许多菜肴的项目账单时,会出现这个问题。谢谢你的帮助。

  • 问题内容: 在我的Java桌面应用程序中,我有一个TableView,我想在其中包含CheckBoxes列。 我确实在http://www.jonathangiles.net/javafx/2.0/CellFactories/上找到了完成的位置,但是由于无法下载,因为我不知道Jonathan Giles会多久回复我的电子邮件,所以我认为d问… 如何将CheckBox放在TableView的单元格中

  • 我试图找到一种方法,将图像添加到JavaFx TableView列中,该列包含通过hibernate从H2数据库填充的其他列中的数据。TableView是在JavaFx场景生成器中设计的。 到目前为止,我一直在努力总结: 控制器类: 我得到一个错误在说. 这是我第一次尝试将图像添加到TableView中。 我从昨天开始四处看看,但现在似乎被卡住了。我希望得到一些帮助。我非常感谢你的帮助。 这是创建

  • 问题内容: 在迭代集合时是否可以向集合中添加元素? 更具体地说,我想遍历一个集合,如果一个元素满足特定条件,我想向集合中添加一些其他元素,并确保也对这些添加的元素进行遍历。(我意识到这可能会导致循环终止,但是我很确定不会发生这种情况。) Sun 的Java教程建议不可能:“请注意,这是在迭代过程中修改集合的唯一安全方法;如果在迭代进行过程中对基础集合进行了其他任何修改,则行为未指定。” 因此,如果