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

无法从数组向网格窗格添加形状

李建中
2023-03-14

作为一项任务,我正在用JavaFX制作一个老虎机程序。

如果我这样做:

GridPane grid = new GridPane();
grid.add(new Rectangle(20, 20), 0, 0);
GridPane grid = new GridPane();
Shape[] shapes = new Shape[6];
Rectangle square = new Rectangle(20, 20);
shapes[0] = square;
grid.add(shapes[0], 0, 0);
    Executing D:\Libraries\Documents\NetBeansProjects\SlotMachine\dist\run624299409\SlotMachine.jar using platform C:\Program Files\Java\jdk1.8.0_60\jre/bin/java
Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: 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$156(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: Children: duplicate children added: parent = Grid hgap=50.0, vgap=50.0, alignment=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 slotmachine.SlotMachine.start(SlotMachine.java:71)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.java:191)
    ... 1 more
Exception running application slotmachine.SlotMachine
Java Result: 1

我不明白为什么。在形状[0]中,我确实有一个矩形,为什么它不允许我将它添加到网格中?

编辑:我使用数组,因为一旦点击一个旋转按钮,就会显示一个随机形状(从0到5的随机索引)

共有1个答案

时恩
2023-03-14

该错误表示您正在将相同的子级再次添加到网格窗格中。检查您的代码是否重新添加。很可能您在代码中构造了一些循环和错误。

 类似资料:
  • 我对JavaFX很陌生。我正在使用网格窗格来保持我的项目在页面的中心,而不管窗口的大小是如何调整的。我想添加一个沿着顶部运行的菜单。我很快发现grid.settop(菜单栏)不是grid Pane的成员函数。有办法吗? 我可以在一个场景中创建两种不同类型的窗格吗?例如,一个用于居中项目的网格窗格和一个用于将菜单置于顶部的边框窗格?或者我应该使用CSS样式来获得顶部的菜单栏?

  • 我知道如何处理MenuItems的操作。我只需要动态网格窗格的帮助。 GridPanes有一个内置的函数addRow,也许它是一个可以使用的函数。我该怎么解决这个?谢谢!感谢所有的提示。

  • 我正在用JavaFX编写一个简单的游戏应用程序,并试图实现重启游戏功能。我最初的想法是拿走gameView窗格,移除它的孩子,然后重新添加干净的。出于某种原因,这行不通。在舞台已经显示后,是否有其他方法在场景中的窗格中添加/移除儿童? 欢迎提出任何建议。

  • pre { white-space: pre-wrap; } 本实例演示如何从服务器端加载数据,如何添加分页组件(pagination)到数据网格(datagrid)。 创建数据网格(DataGrid) 为了从远程服务器端加载数据,您应该设置 'url' 属性,在您的服务器端应该返回 JSON 格式数据。请看数据网格(datagrid)文档得到更多关于它的数据格式信息。     <table i

  • pre { white-space: pre-wrap; } 本教程展示如何向带有动态加载特性的树形网格(TreeGrid)添加分页。 创建树形网格(TreeGrid) 启用树形网格(TreeGrid)的分页特性,必须添加 'pagination:true' 属性,这样页面加载时就会向服务器发送 'page' 和 'rows' 参数。     <table title="Products"   

  • 我无法在SceneBuilder(eclipse)中使用GridPane,当我尝试在项目中插入GridPane时,SceneBuilder会在没有提示任何消息的情况下退出。 这就是我在日志文件中找到的: