checkboard javafx逻辑错误

时间:2015-12-22 07:03:34

标签: java javafx

这是通过从谷歌拍摄两张图片来制作棋盘的代码,但是当我运行它时,它告诉我多个异常。我不知道自己做错了什么,因为没有语法错误,有逻辑错误。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;


public class CheckBoard extends Application{

    public void start(Stage primaryStage) {

       ImageView imag = new      ImageView("https://c1.staticflickr.com/5/
       4034/4544827697_6f73866999_b.jpg");
       ImageView imag1 = new         ImageView("https://upload.
       wikimedia.org/wikipedia/commons/thumb/2/25/Red.svg/2000px-Red.svg.png");
       GridPane pane = new GridPane();
       imag1.setFitHeight(50);
       imag1.setFitWidth(50);
       imag.setFitHeight(50);
       imag.setFitWidth(50);

       for(int i=0;i<8;i++)
       {
           for(int j=0;j<8;j++)
           {
               if(j%2==0) pane.add(imag, i, j);
               else pane.add(imag1, i, j);
           }
       }

       Scene scene= new Scene(pane,600,600);
       primaryStage.setScene(scene);
       primaryStage.show();
    }


}

1 个答案:

答案 0 :(得分:0)

您将收到以下

之类的例外情况
...
Caused by: java.lang.IllegalArgumentException: Children: duplicate children added: parent = Grid hgap=0.0, vgap=0.0, alignment=TOP_LEFT
    at javafx.scene.Parent$2.onProposedChange(Unknown Source)
...

因为您无法将Node(您的ImageView)添加到多个父级。您需要加载图像,然后为每个单元格创建单独的ImageViews

...
public void start(Stage primaryStage) {

   Image image = new Image("https://c1.staticflickr.com/5/4034/4544827697_6f73866999_b.jpg");
   Image image1 = new Image("https://upload.wikimedia.org/wikipedia/commons/thumb/2/25/Red.svg/2000px-Red.svg.png");

   GridPane pane = new GridPane();
   for(int i=0; i<8; i++) {
       for(int j=0; j<8; j++){
           ImageView view;
           if(j % 2 == 0) {
               view = new ImageView(image);
           }
           else {
               view = new ImageView(image1);
           }

           view.setFitHeight(50);
           view.setFitWidth(50);
           pane.add(view, i, j);
       }
   }
}
...

在旁注中,您使用的图像似乎只能读取和黑色方块 - 我假设您想在实际应用中使用不同的图像,但如果您真的想使用彩色矩形,则可能更好用Rectangle代替Image