gridpane javafx可点击的单元格,可以切换和取消切换

时间:2018-04-15 10:54:50

标签: javafx cell gridpane onmousedown

我正在尝试创建一个在用户点击特定单元格时切换/取消停止的网格窗格。例如,当用户点击具有内容" *"的单元格时,我希望将该特定单元格的内容更改为空白单元格" &#34 ;.类似地,如果用户点击具有空白内容的单元格" ",我希望将该单元格的内容更改为包含内容" *"的单元格。

基本上,我开始使用的网格部分输入如下:

enter image description here

我的网格窗格最初输入如下,我正在跟踪一个布尔矩阵,表示是否应该有一个" *"在矩阵的一个单元格中。如果有" *"在网格窗格的单元格[i,j]中,则矩阵[i,j]的值应为true,否则应为false

  boolean matrix[][] = new boolean[StateList.size()+1][RequirementList.size()+1];

    for( InstanceArtifact li: ListOfLinks) {
        int y=1; 
        for(InstanceArtifact re: RequirementList) {
            int x=1; 
            for(InstanceArtifact state: StateList) {
             if(li.getPropertyValue("linksource").equals(re) && li.getPropertyValue("linktarget").equals(state)) {

                     link= new Label("    *    "); 
                    //tick in cell (1,1)
                    grid.add(link, y, x); 
                    matrix[x][y]= true; 

                }
             else {
                   link= new Label("         "); 
                    //tick in cell (1,1)
                    grid.add(link, y, x); 

             }
             x++; 


        }
        y++; 
    }


    }




    }

我想做的是切换/解开星星,这就是我正在尝试使用下面的代码,因为我们点击了包含" *"的单元格,这意味着{ {1}},我正在删除网格中的相应标签,我正在添加一个带有空文本的新标签。在标签文本为空白的相反情况下我也会做同样的事情,我需要用包含星号的标签替换它。

matrix[i][j]=true

我的代码没有按预期运行,我希望每当用户点击一个单元格时,单元格都会切换/取消,代码只在用户第一次点击给定单元格时执行,如果用户点击同一个细胞多次(不止一次),然后什么也没发生。

此外,我尝试删除标签的代码行无效:

         grid.getChildren().forEach(element -> {
                         element.setOnMouseClicked(new EventHandler<MouseEvent>() {

                    @Override
                    public void handle(MouseEvent event) {
                        int matrixX= GridPane.getRowIndex(element); 
                        int matrixY= GridPane.getColumnIndex(element); 
                        if(element!=null  && matrixX!=0 && matrixY!=0) {

                             System.out.println("matrixX: "+matrixX+"   matrixY: "+matrixY);
                             System.out.println("matrixY: "+matrixY+" "+ matrix[matrixX][matrixY]);
                            if(matrix[matrixX][matrixY]==true && matrixX!=0 && matrixY!=0) {

                                   System.out.println("HEY I AM HERE FIRSTTTTTTTTT");

                                  Node newnode= new Label("     ");
                                  GridPane.clearConstraints(element); 
                                 // grid.getChildren().remove(element); 

                                grid.add(newnode, matrixY, matrixX); 
                                matrix[matrixX][matrixY]=false; 
                                /*for(int l=0; l<RequirementList.size(); l++) {
                                    for(int p=0; p<StateList.size(); p++) {
                                        System.out.println(l + "  "+p +" "+matrix[l][p]);
                                    }
                                }*/


                                //grid.add(mynode, matrixY+1, matrixX+1, 1, 1); 


                            }
                            else if(matrix[matrixX][matrixY]==false && matrixX!=0 && matrixY!=0){

                                 System.out.println("HEY I AM HERE SECONDDDDDDD   ");

                                /* for(int l=0; l<RequirementList.size(); l++) {
                                        for(int p=0; p<StateList.size(); p++) {
                                            System.out.println(l + "  "+p +" "+matrix[l][p]);
                                        }
                                    }*/

                                    Node falsenode= new Label("   *      ");
                                    GridPane.clearConstraints(element); 
                                     // grid.getChildren().remove(element); 

                                    grid.add(falsenode, matrixY, matrixX); 
                                    matrix[matrixX][matrixY]=true; 


                            }


                         //   System.out.println("Row: " + GridPane.getRowIndex(element));
                           // System.out.println("Column: " + GridPane.getColumnIndex(element));
                        }   
                        }

                });
                     });

1 个答案:

答案 0 :(得分:1)

Use of uninitialized value in numeric comparison (<=>) at (eval 4) line 1. 888888888888888888888888888888888888888888888888.8 => 7 999999999999999999999999999999999999999999999999.9 => 5 8.8.8.8 => 3 20.0.0.1 => 4 127.0.0.1 => 2 1.1.1.1.1 => 1 8.8.8.8.0 => 6 可以提供更好的服务。代码中的评论。

ToggleButton