Показать список при нажатии кнопки RadioButton в JavaFX - PullRequest
0 голосов
/ 28 апреля 2018


Я ищу способ отображения списка «компаний», только когда в моем графическом интерфейсе нажата одна из двух кнопок RadioButton.

Вот код:

public class CompaniesChoice {
    private BorderPane borderOnce;
    private HBox hb;
    private final ToggleGroup group;
    private Text companies;
    private Button goOn;
    private RadioButton btnDefault;
    private RadioButton btnPersonalized;
    private GridPane secondaryPane;
    /*TODO: add List of Companies*/

public CompaniesChoice(){
    borderOnce = new BorderPane();
    secondaryPane = new GridPane();
    goOn = new Button("Continue");

    companies = new Text("Companies");
    btnDefault = new RadioButton("Default");
    btnPersonalized = new RadioButton("Personalized");
    secondaryPane.add(companies, 0, 0);
    secondaryPane.add(btnDefault, 1, 0);
    secondaryPane.add(btnPersonalized, 2, 0);
    secondaryPane.setVgap(25.0);
    secondaryPane.setHgap(25.0);

    group = new ToggleGroup();

    btnDefault.setToggleGroup(group);
    btnDefault.setSelected(true);

    btnPersonalized.setToggleGroup(group);

    borderOnce.setTop(secondaryPane);
    //borderOnce.setCenter(List of companies);
    borderOnce.setBottom(goOn);

    hb = new HBox();
    hb.getChildren().add(borderOnce);
    hb.setAlignment(Pos.CENTER);
}

public HBox getPane() {
    return this.hb;
}
}

Ну, моя идея - создать что-то вроде этого: Ссылка на изображение

Теперь забудьте об объектах «Имя» и «Значение». Вместо этого мне нужно знать, кому показывать TableView, только когда я нажимаю кнопку «Персонализированный» RadioButton.

Спасибо

1 Ответ

0 голосов
/ 28 апреля 2018

Добавьте слушателя к свойству ToggleGroup.selected или Toggle.selected, которое добавляет или удаляет список из родительского объекта. В этом случае, так как вы используете BorderPane, вы также можете привязать свойство center в зависимости от выбранного переключателя:

Node nodeToDisplay = ...; // in this case use the ListView/TableView
borderOnce.centerProperty().bind(Bindings.when(btnPersonalized.selectedProperty())
                                         .<Node>then(nodeToDisplay)
                                         .otherwise((Node) null));

Альтернатива со слушателем

btnPersonalized.selectedProperty().addListener((o, oldValue, newValue) -> {
    if (newValue) {
        borderOnce.setCenter(nodeToDisplay);
    } else {
        borderOnce.setCenter(null);
    }
});

В этом случае вам необходимо убедиться, что начальное состояние графического интерфейса является «действительным».

...