Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用FXML将鼠标单击操作事件添加到JavaFX中的标签_Java_Model View Controller_Javafx_Fxml_Labels - Fatal编程技术网

使用FXML将鼠标单击操作事件添加到JavaFX中的标签

使用FXML将鼠标单击操作事件添加到JavaFX中的标签,java,model-view-controller,javafx,fxml,labels,Java,Model View Controller,Javafx,Fxml,Labels,我正在用JavaFX制作一个风险版本。现在,为了显示游戏数据,我使用了一个标签网格来显示每个区域的信息。我想,现在,有鼠标点击监听器的标签,这样我就可以测试游戏功能,通过点击他们,直到我有完整的游戏板。除非我试图在FXML文档中添加侦听器,否则会出现错误。现在,我在控制器中声明标签,将它们添加到集合中,以便使用循环绑定每个标签的textProperty,然后将每个标签添加到网格中。然后,在FXML中,我将为每个对象定义onMouseClicked。 以下是控制器代码: @FXML private

我正在用JavaFX制作一个风险版本。现在,为了显示游戏数据,我使用了一个标签网格来显示每个区域的信息。我想,现在,有鼠标点击监听器的标签,这样我就可以测试游戏功能,通过点击他们,直到我有完整的游戏板。除非我试图在FXML文档中添加侦听器,否则会出现错误。现在,我在控制器中声明标签,将它们添加到集合中,以便使用循环绑定每个标签的textProperty,然后将每个标签添加到网格中。然后,在FXML中,我将为每个对象定义onMouseClicked。 以下是控制器代码:

@FXML
private GridPane tGrid = new GridPane();

@FXML Label label1 = new Label();
@FXML Label label2 = new Label();
@FXML Label label3 = new Label();
@FXML Label label4 = new Label();
@FXML Label label5 = new Label();
@FXML Label label6 = new Label();
@FXML Label label7 = new Label();
@FXML Label label8 = new Label();
@FXML Label label9 = new Label();
@FXML Label label10 = new Label();
@FXML Label label11 = new Label();
@FXML Label label12 = new Label();
@FXML Label label13 = new Label();
@FXML Label label14 = new Label();
@FXML Label label15 = new Label();
@FXML Label label16 = new Label();
@FXML Label label17 = new Label();
@FXML Label label18 = new Label();
@FXML Label label19 = new Label();
@FXML Label label20 = new Label();
@FXML Label label21 = new Label();
@FXML Label label22 = new Label();
@FXML Label label23 = new Label();
@FXML Label label24 = new Label();
@FXML Label label25 = new Label();
@FXML Label label26 = new Label();
@FXML Label label27 = new Label();
@FXML Label label28 = new Label();
@FXML Label label29 = new Label();
@FXML Label label30 = new Label();
@FXML Label label31 = new Label();
@FXML Label label32 = new Label();
@FXML Label label33 = new Label();
@FXML Label label34 = new Label();
@FXML Label label35 = new Label();
@FXML Label label36 = new Label();
@FXML Label label37 = new Label();
@FXML Label label38 = new Label();
@FXML Label label39 = new Label();
@FXML Label label40 = new Label();
@FXML Label label41 = new Label();
@FXML Label label42 = new Label();


@Override
public void initialize(URL url, ResourceBundle rb) {
    anchor.setLeftAnchor(tGrid, 10.0);
    anchor.setRightAnchor(pGrid, 10.0);
    tGrid.setVisible(false);
    pGrid.setVisible(false);
    labels.add(label1);
    labels.add(label2);
    labels.add(label3);
    labels.add(label4);
    labels.add(label5);
    labels.add(label6);
    labels.add(label7);
    labels.add(label8);
    labels.add(label9);
    labels.add(label10);
    labels.add(label11);
    labels.add(label12);
    labels.add(label13);
    labels.add(label14);
    labels.add(label15);
    labels.add(label16);
    labels.add(label17);
    labels.add(label18);
    labels.add(label19);
    labels.add(label20);
    labels.add(label21);
    labels.add(label22);
    labels.add(label23);
    labels.add(label24);
    labels.add(label25);
    labels.add(label26);
    labels.add(label27);
    labels.add(label28);
    labels.add(label29);
    labels.add(label30);
    labels.add(label31);
    labels.add(label32);
    labels.add(label33);
    labels.add(label34);
    labels.add(label35);
    labels.add(label36);
    labels.add(label37);
    labels.add(label38);
    labels.add(label39);
    labels.add(label40);
    labels.add(label41);
    labels.add(label42);
    int k = 0;
    for(int i = 0; i < 6; i++) {
        for(int j = 0; j < game.getContinent(i).getTerritoryNum(); j++) {
            labels.get(k).textProperty().bind(game.getContinent(i).getTerritory(j).getProperty());
            k += 1;
        }//for
    }//for
    for (int i = 0; i < 42; i++) {
        tGrid.add(labels.get(i), 0, i);
    }//for
         <Label fx:id="label1"onMouseClicked="#labelAction" />
            <Label fx:id="label2"/>
            <Label fx:id="label3"/>
            <Label fx:id="label4"/>
            <Label fx:id="label5"/>
            <Label fx:id="label6"/>
            <Label fx:id="label7"/>
            <Label fx:id="label8"/>
            <Label fx:id="label9"/>
            <Label fx:id="label10"/>
            <Label fx:id="label11"/>
            <Label fx:id="label12"/>
            <Label fx:id="label13"/>
            <Label fx:id="label14"/>
            <Label fx:id="label15"/>
            <Label fx:id="label16"/>
            <Label fx:id="label17"/>
            <Label fx:id="label18"/>
            <Label fx:id="label19"/>
            <Label fx:id="label20"/>
            <Label fx:id="label21"/>
            <Label fx:id="label22"/>
            <Label fx:id="label23"/>
            <Label fx:id="label24"/>
            <Label fx:id="label25"/>
            <Label fx:id="label26"/>
            <Label fx:id="label27"/>
            <Label fx:id="label28"/>
            <Label fx:id="label29"/>
            <Label fx:id="label30"/>
            <Label fx:id="label31"/>
            <Label fx:id="label32"/>
            <Label fx:id="label33"/>
            <Label fx:id="label34"/>
            <Label fx:id="label35"/>
            <Label fx:id="label36"/>
            <Label fx:id="label37"/>
            <Label fx:id="label38"/>
            <Label fx:id="label39"/>
            <Label fx:id="label40"/>
            <Label fx:id="label41"/>
            <Label fx:id="label42"/>
更新

         <Label fx:id="label1"onMouseClicked="#labelAction" />
            <Label fx:id="label2"/>
            <Label fx:id="label3"/>
            <Label fx:id="label4"/>
            <Label fx:id="label5"/>
            <Label fx:id="label6"/>
            <Label fx:id="label7"/>
            <Label fx:id="label8"/>
            <Label fx:id="label9"/>
            <Label fx:id="label10"/>
            <Label fx:id="label11"/>
            <Label fx:id="label12"/>
            <Label fx:id="label13"/>
            <Label fx:id="label14"/>
            <Label fx:id="label15"/>
            <Label fx:id="label16"/>
            <Label fx:id="label17"/>
            <Label fx:id="label18"/>
            <Label fx:id="label19"/>
            <Label fx:id="label20"/>
            <Label fx:id="label21"/>
            <Label fx:id="label22"/>
            <Label fx:id="label23"/>
            <Label fx:id="label24"/>
            <Label fx:id="label25"/>
            <Label fx:id="label26"/>
            <Label fx:id="label27"/>
            <Label fx:id="label28"/>
            <Label fx:id="label29"/>
            <Label fx:id="label30"/>
            <Label fx:id="label31"/>
            <Label fx:id="label32"/>
            <Label fx:id="label33"/>
            <Label fx:id="label34"/>
            <Label fx:id="label35"/>
            <Label fx:id="label36"/>
            <Label fx:id="label37"/>
            <Label fx:id="label38"/>
            <Label fx:id="label39"/>
            <Label fx:id="label40"/>
            <Label fx:id="label41"/>
            <Label fx:id="label42"/>
好的,我删除了所有的“=new Label()”,它消除了这个错误,因为问题是通过在fxml和控制器中定义它们,我试图添加重复的元素。现在我的问题是如何将标签添加到fxml中的gridpane中,位置与在示例控制器代码底部的循环中添加标签时相同?这是一种将它们添加到fxml中的arraylist并直接添加的方法吗?我知道我能做到

         <Label fx:id="label1"onMouseClicked="#labelAction" />
            <Label fx:id="label2"/>
            <Label fx:id="label3"/>
            <Label fx:id="label4"/>
            <Label fx:id="label5"/>
            <Label fx:id="label6"/>
            <Label fx:id="label7"/>
            <Label fx:id="label8"/>
            <Label fx:id="label9"/>
            <Label fx:id="label10"/>
            <Label fx:id="label11"/>
            <Label fx:id="label12"/>
            <Label fx:id="label13"/>
            <Label fx:id="label14"/>
            <Label fx:id="label15"/>
            <Label fx:id="label16"/>
            <Label fx:id="label17"/>
            <Label fx:id="label18"/>
            <Label fx:id="label19"/>
            <Label fx:id="label20"/>
            <Label fx:id="label21"/>
            <Label fx:id="label22"/>
            <Label fx:id="label23"/>
            <Label fx:id="label24"/>
            <Label fx:id="label25"/>
            <Label fx:id="label26"/>
            <Label fx:id="label27"/>
            <Label fx:id="label28"/>
            <Label fx:id="label29"/>
            <Label fx:id="label30"/>
            <Label fx:id="label31"/>
            <Label fx:id="label32"/>
            <Label fx:id="label33"/>
            <Label fx:id="label34"/>
            <Label fx:id="label35"/>
            <Label fx:id="label36"/>
            <Label fx:id="label37"/>
            <Label fx:id="label38"/>
            <Label fx:id="label39"/>
            <Label fx:id="label40"/>
            <Label fx:id="label41"/>
            <Label fx:id="label42"/>
<Label fx:id="label1" onMouseClicked="#labelAction" GridPane.columnIndex="0" GridPane.rowIndex="0" />


对于每一个标签,但必须有一个更好的方法,而不是手工打字和放置每一个标签的权利?它们只需要在增加的行中位于同一列。

我遇到了一个与您类似的问题,并以不同的方式解决了它:
         <Label fx:id="label1"onMouseClicked="#labelAction" />
            <Label fx:id="label2"/>
            <Label fx:id="label3"/>
            <Label fx:id="label4"/>
            <Label fx:id="label5"/>
            <Label fx:id="label6"/>
            <Label fx:id="label7"/>
            <Label fx:id="label8"/>
            <Label fx:id="label9"/>
            <Label fx:id="label10"/>
            <Label fx:id="label11"/>
            <Label fx:id="label12"/>
            <Label fx:id="label13"/>
            <Label fx:id="label14"/>
            <Label fx:id="label15"/>
            <Label fx:id="label16"/>
            <Label fx:id="label17"/>
            <Label fx:id="label18"/>
            <Label fx:id="label19"/>
            <Label fx:id="label20"/>
            <Label fx:id="label21"/>
            <Label fx:id="label22"/>
            <Label fx:id="label23"/>
            <Label fx:id="label24"/>
            <Label fx:id="label25"/>
            <Label fx:id="label26"/>
            <Label fx:id="label27"/>
            <Label fx:id="label28"/>
            <Label fx:id="label29"/>
            <Label fx:id="label30"/>
            <Label fx:id="label31"/>
            <Label fx:id="label32"/>
            <Label fx:id="label33"/>
            <Label fx:id="label34"/>
            <Label fx:id="label35"/>
            <Label fx:id="label36"/>
            <Label fx:id="label37"/>
            <Label fx:id="label38"/>
            <Label fx:id="label39"/>
            <Label fx:id="label40"/>
            <Label fx:id="label41"/>
            <Label fx:id="label42"/>
在标签顶部创建一个按钮,并将不透明度指定为0

         <Label fx:id="label1"onMouseClicked="#labelAction" />
            <Label fx:id="label2"/>
            <Label fx:id="label3"/>
            <Label fx:id="label4"/>
            <Label fx:id="label5"/>
            <Label fx:id="label6"/>
            <Label fx:id="label7"/>
            <Label fx:id="label8"/>
            <Label fx:id="label9"/>
            <Label fx:id="label10"/>
            <Label fx:id="label11"/>
            <Label fx:id="label12"/>
            <Label fx:id="label13"/>
            <Label fx:id="label14"/>
            <Label fx:id="label15"/>
            <Label fx:id="label16"/>
            <Label fx:id="label17"/>
            <Label fx:id="label18"/>
            <Label fx:id="label19"/>
            <Label fx:id="label20"/>
            <Label fx:id="label21"/>
            <Label fx:id="label22"/>
            <Label fx:id="label23"/>
            <Label fx:id="label24"/>
            <Label fx:id="label25"/>
            <Label fx:id="label26"/>
            <Label fx:id="label27"/>
            <Label fx:id="label28"/>
            <Label fx:id="label29"/>
            <Label fx:id="label30"/>
            <Label fx:id="label31"/>
            <Label fx:id="label32"/>
            <Label fx:id="label33"/>
            <Label fx:id="label34"/>
            <Label fx:id="label35"/>
            <Label fx:id="label36"/>
            <Label fx:id="label37"/>
            <Label fx:id="label38"/>
            <Label fx:id="label39"/>
            <Label fx:id="label40"/>
            <Label fx:id="label41"/>
            <Label fx:id="label42"/>
这样,按钮不会向最终用户显示,但当他们单击标签时,底层按钮会拾取操作。因为它是一个标准的javafx按钮,所以您只需使用onAction=“#yourAction”,甚至不必更改标签中的任何内容

         <Label fx:id="label1"onMouseClicked="#labelAction" />
            <Label fx:id="label2"/>
            <Label fx:id="label3"/>
            <Label fx:id="label4"/>
            <Label fx:id="label5"/>
            <Label fx:id="label6"/>
            <Label fx:id="label7"/>
            <Label fx:id="label8"/>
            <Label fx:id="label9"/>
            <Label fx:id="label10"/>
            <Label fx:id="label11"/>
            <Label fx:id="label12"/>
            <Label fx:id="label13"/>
            <Label fx:id="label14"/>
            <Label fx:id="label15"/>
            <Label fx:id="label16"/>
            <Label fx:id="label17"/>
            <Label fx:id="label18"/>
            <Label fx:id="label19"/>
            <Label fx:id="label20"/>
            <Label fx:id="label21"/>
            <Label fx:id="label22"/>
            <Label fx:id="label23"/>
            <Label fx:id="label24"/>
            <Label fx:id="label25"/>
            <Label fx:id="label26"/>
            <Label fx:id="label27"/>
            <Label fx:id="label28"/>
            <Label fx:id="label29"/>
            <Label fx:id="label30"/>
            <Label fx:id="label31"/>
            <Label fx:id="label32"/>
            <Label fx:id="label33"/>
            <Label fx:id="label34"/>
            <Label fx:id="label35"/>
            <Label fx:id="label36"/>
            <Label fx:id="label37"/>
            <Label fx:id="label38"/>
            <Label fx:id="label39"/>
            <Label fx:id="label40"/>
            <Label fx:id="label41"/>
            <Label fx:id="label42"/>

希望这有帮助

您能识别FXML文件中的相关行(第34行)吗?这不是错误的原因,但是您不应该初始化
@FXML
注入的字段(即,删除语句中的所有
=new Label()
部分,以及
=new GridPane()
(同样,在Java代码中使用循环不是比在FXML中更好吗?)
中应该有一个空格,你听说过吗?试着用它来操纵你的fxml。它是一个可以拖放组件的工具,它可以为你创建fxml代码。
         <Label fx:id="label1"onMouseClicked="#labelAction" />
            <Label fx:id="label2"/>
            <Label fx:id="label3"/>
            <Label fx:id="label4"/>
            <Label fx:id="label5"/>
            <Label fx:id="label6"/>
            <Label fx:id="label7"/>
            <Label fx:id="label8"/>
            <Label fx:id="label9"/>
            <Label fx:id="label10"/>
            <Label fx:id="label11"/>
            <Label fx:id="label12"/>
            <Label fx:id="label13"/>
            <Label fx:id="label14"/>
            <Label fx:id="label15"/>
            <Label fx:id="label16"/>
            <Label fx:id="label17"/>
            <Label fx:id="label18"/>
            <Label fx:id="label19"/>
            <Label fx:id="label20"/>
            <Label fx:id="label21"/>
            <Label fx:id="label22"/>
            <Label fx:id="label23"/>
            <Label fx:id="label24"/>
            <Label fx:id="label25"/>
            <Label fx:id="label26"/>
            <Label fx:id="label27"/>
            <Label fx:id="label28"/>
            <Label fx:id="label29"/>
            <Label fx:id="label30"/>
            <Label fx:id="label31"/>
            <Label fx:id="label32"/>
            <Label fx:id="label33"/>
            <Label fx:id="label34"/>
            <Label fx:id="label35"/>
            <Label fx:id="label36"/>
            <Label fx:id="label37"/>
            <Label fx:id="label38"/>
            <Label fx:id="label39"/>
            <Label fx:id="label40"/>
            <Label fx:id="label41"/>
            <Label fx:id="label42"/>