Javafx 如何在Hbox中获取节点索引

Javafx 如何在Hbox中获取节点索引,javafx,Javafx,我试着在Hbox中添加按钮我想在按钮点击时获取索引 这就是我所做的 HBox gp = new HBox(10); gp.setPadding(new Insets(3)); for (int i = 0; i < 20; i++) { JFXButton jb = new JFXButton("Number " + i); jb.setStyle("-fx-background-color: rgb(230, 126, 34)")

我试着在Hbox中添加按钮我想在按钮点击时获取索引 这就是我所做的

    HBox gp = new HBox(10);
    gp.setPadding(new Insets(3));

    for (int i = 0; i < 20; i++) {
        JFXButton jb = new JFXButton("Number " + i);
        jb.setStyle("-fx-background-color: rgb(230, 126, 34)");

        jb.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {

                System.out.println("index no?");
            }
        });
        jb.setMinWidth(100);
        jb.setMinHeight(50);
        gp.getChildren().add(jb);
    }

    gp.prefWidthProperty().bind(topscroll.widthProperty());
    topscroll.setContent(gp);


    gp.prefWidthProperty().bind(topscroll.widthProperty());
    topscroll.setContent(gp);
hboxgp=新的HBox(10);
总成设置填充(新插图(3));
对于(int i=0;i<20;i++){
JFXButton jb=新的JFXButton(“编号”+i);
jb.setStyle(“-fx背景色:rgb(230、126、34)”);
jb.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
System.out.println(“索引号”);
}
});
jb.设置最小宽度(100);
jb.设置最小高度(50);
gp.getChildren().add(jb);
}
gp.prefWidthProperty().bind(topscroll.widthProperty());
topscroll.setContent(gp);
gp.prefWidthProperty().bind(topscroll.widthProperty());
topscroll.setContent(gp);

有什么建议吗?

您可以将索引复制到最终变量中:

for (int i = 0; i < 20; i++) {
    JFXButton jb = new JFXButton("Number " + i);
    jb.setStyle("-fx-background-color: rgb(230, 126, 34)");

    int index = i ;

    jb.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {

            System.out.println("index no: " + index);
        }
    });
    jb.setMinWidth(100);
    jb.setMinHeight(50);
    gp.getChildren().add(jb);
}
for (int i = 0; i < 20; i++) {
    JFXButton jb = new JFXButton("Number " + i);
    jb.setStyle("-fx-background-color: rgb(230, 126, 34)");

    jb.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {

            System.out.println("Click on "+jb.getText());
        }
    });
    jb.setMinWidth(100);
    jb.setMinHeight(50);
    gp.getChildren().add(jb);
}
for(int i=0;i<20;i++){
JFXButton jb=新的JFXButton(“编号”+i);
jb.setStyle(“-fx背景色:rgb(230、126、34)”);
int指数=i;
jb.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
System.out.println(“索引号:“+索引”);
}
});
jb.设置最小宽度(100);
jb.设置最小高度(50);
gp.getChildren().add(jb);
}
注意:您可以直接获取按钮(如果您只需要此按钮),而无需创建另一个变量:

for (int i = 0; i < 20; i++) {
    JFXButton jb = new JFXButton("Number " + i);
    jb.setStyle("-fx-background-color: rgb(230, 126, 34)");

    int index = i ;

    jb.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {

            System.out.println("index no: " + index);
        }
    });
    jb.setMinWidth(100);
    jb.setMinHeight(50);
    gp.getChildren().add(jb);
}
for (int i = 0; i < 20; i++) {
    JFXButton jb = new JFXButton("Number " + i);
    jb.setStyle("-fx-background-color: rgb(230, 126, 34)");

    jb.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {

            System.out.println("Click on "+jb.getText());
        }
    });
    jb.setMinWidth(100);
    jb.setMinHeight(50);
    gp.getChildren().add(jb);
}
for(int i=0;i<20;i++){
JFXButton jb=新的JFXButton(“编号”+i);
jb.setStyle(“-fx背景色:rgb(230、126、34)”);
jb.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
System.out.println(“单击”+jb.getText());
}
});
jb.设置最小宽度(100);
jb.设置最小高度(50);
gp.getChildren().add(jb);
}

您可以将索引复制到最终变量中:

for (int i = 0; i < 20; i++) {
    JFXButton jb = new JFXButton("Number " + i);
    jb.setStyle("-fx-background-color: rgb(230, 126, 34)");

    int index = i ;

    jb.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {

            System.out.println("index no: " + index);
        }
    });
    jb.setMinWidth(100);
    jb.setMinHeight(50);
    gp.getChildren().add(jb);
}
for (int i = 0; i < 20; i++) {
    JFXButton jb = new JFXButton("Number " + i);
    jb.setStyle("-fx-background-color: rgb(230, 126, 34)");

    jb.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {

            System.out.println("Click on "+jb.getText());
        }
    });
    jb.setMinWidth(100);
    jb.setMinHeight(50);
    gp.getChildren().add(jb);
}
for(int i=0;i<20;i++){
JFXButton jb=新的JFXButton(“编号”+i);
jb.setStyle(“-fx背景色:rgb(230、126、34)”);
int指数=i;
jb.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
System.out.println(“索引号:“+索引”);
}
});
jb.设置最小宽度(100);
jb.设置最小高度(50);
gp.getChildren().add(jb);
}
注意:您可以直接获取按钮(如果您只需要此按钮),而无需创建另一个变量:

for (int i = 0; i < 20; i++) {
    JFXButton jb = new JFXButton("Number " + i);
    jb.setStyle("-fx-background-color: rgb(230, 126, 34)");

    int index = i ;

    jb.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {

            System.out.println("index no: " + index);
        }
    });
    jb.setMinWidth(100);
    jb.setMinHeight(50);
    gp.getChildren().add(jb);
}
for (int i = 0; i < 20; i++) {
    JFXButton jb = new JFXButton("Number " + i);
    jb.setStyle("-fx-background-color: rgb(230, 126, 34)");

    jb.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {

            System.out.println("Click on "+jb.getText());
        }
    });
    jb.setMinWidth(100);
    jb.setMinHeight(50);
    gp.getChildren().add(jb);
}
for(int i=0;i<20;i++){
JFXButton jb=新的JFXButton(“编号”+i);
jb.setStyle(“-fx背景色:rgb(230、126、34)”);
jb.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
System.out.println(“单击”+jb.getText());
}
});
jb.设置最小宽度(100);
jb.设置最小高度(50);
gp.getChildren().add(jb);
}

如果在句柄方法中调用event.getSource(),您将能够获得触发事件的按钮,这还不够吗?@JKostikiadis如果只需要获得按钮,您甚至不需要调用
event.getSource()
:触发事件的按钮是
jb
,您可以在事件处理程序中访问它(它是“有效的最终版本”)@James_D当然可以,但老实说,出于可读性的目的,我更喜欢实际调用event.getSource()。特别是当方法超过10-15行(出于某种原因:P)时,有没有办法将鼠标事件添加到Hbox并获取按钮索引?因为使用for循环会降低效率。我使用了vbox而不是按钮。并添加几个其他节点。现在我想找到一种方法来改变vbox中的值,有人知道吗?我尝试了vbox.getChildren().get(1),但在这个vbox中还有一个hbox。我想更改hbox中的值我该怎么做?如果在handle方法中调用event.getSource(),您将能够获取触发事件的按钮,这还不够吗?@JKostikiadis如果只需要获取按钮,您甚至不需要调用
event.getSource()
:触发事件的按钮是
jb
,您可以在事件处理程序中访问它(它是“有效的最终”)。@James\u D当然,但老实说,出于可读性目的,我更喜欢实际调用event.getSource()。特别是当方法超过10-15行(出于某种原因:P)时,有没有办法将鼠标事件添加到Hbox并获取按钮索引?因为使用for循环会降低效率。我使用了vbox而不是按钮。并添加几个其他节点。现在我想找到一种方法来改变vbox中的值,有人知道吗?我尝试了vbox.getChildren().get(1),但在这个vbox中还有一个hbox。我想改变hbox里面的价值观我该怎么做?Thanx mate让新年变得有意义!哈哈,干杯!新年快乐!!Thanx mate让新年变得有意义!哈哈,干杯!新年快乐!!