У Hbox есть дочерние кнопки, как их захватывать и добавлять? - PullRequest
0 голосов
/ 14 марта 2020

для начала вот F XML, простой Hbox с кнопками внутри:

        <HBox fx:id="hboxOfCategories" alignment="CENTER_LEFT" spacing="10.0">
           <children>
              <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" prefHeight="57.0" prefWidth="82.0" text="Boissons" />
              <Button layoutX="10.0" layoutY="10.0" maxHeight="1.7976931348623157E308" mnemonicParsing="false" prefHeight="57.0" prefWidth="82.0" text="Burger" />
              <Button layoutX="102.0" layoutY="10.0" maxHeight="1.7976931348623157E308" mnemonicParsing="false" prefHeight="57.0" prefWidth="82.0" text="Tacos" />
              <Button layoutX="378.0" layoutY="10.0" maxHeight="1.7976931348623157E308" mnemonicParsing="false" prefHeight="57.0" prefWidth="82.0" text="Pizza" />
              <Button layoutX="194.0" layoutY="10.0" maxHeight="1.7976931348623157E308" mnemonicParsing="false" prefHeight="57.0" prefWidth="82.0" text="Baguette Farcie" textAlignment="CENTER" wrapText="true" />
              <Button layoutX="286.0" layoutY="10.0" maxHeight="1.7976931348623157E308" mnemonicParsing="false" prefHeight="57.0" prefWidth="82.0" text="Souflee" />
           </children>
        </HBox>

я сохранил его содержимое в списке Observable, это должен был быть тип Node, потому что метод .getChildren () возвращает что-то типа Узел:

f xml код контроллера:

@FXML
    private void initialize(){

    ObservableList<Node> hboxButtons = hboxOfCategories.getChildren();

}

Как я могу получить эти кнопки и добавить к ним прослушиватель, который срабатывает при нажатии кнопок? как то так:

hboxofCategories.getchildren().addlistener(e -> {
doEpicStuff();
});

1 Ответ

0 голосов
/ 14 марта 2020

Это должно помочь:

for(Node button : hboxOfCategories.getChildren())
    {
        ((Button)button).setOnAction(a -> {
                System.out.println("Pressed : "+ ((Button)button).getText());
            });
    }

Вывод:

enter image description here

РЕДАКТИРОВАТЬ :

Вот как вы можете получить индекс:

for(int i=0;i<hboxOfCategories.getChildren().size();i++)
{
    Button button=(Button)hboxOfCategories.getChildren().get(i);
    int index=i;
    button.setOnAction(a->
                       {
                           System.out.println("Name : "+button.getText()+" | Index : "+index);
                       });
}
...