Как сделать двунаправленную привязку между StringProperty и комбинированным списком SelectedItemProperty - PullRequest
0 голосов
/ 18 мая 2019

Я хочу иметь двунаправленную привязку между StringProperty и комбинированным списком SelectedItemProperty. Всякий раз, когда выбранный элемент списка изменяется, он должен отражать значение для StringProperty. Аналогично, всякий раз, когда значение StringProperty изменяется, ему следует выбрать значение в выпадающем списке.

Как мы можем сделать это связывание?

1 Ответ

3 голосов
/ 18 мая 2019

Вы не можете привязать к SelectedItemProperty, но вместо этого добавите привязку к ValueProperty из ComboBox:

comboBox.valueProperty().bindBidirectional(stringProperty);

Вот полный пример для демонстрации:

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class BiBindingExample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        // Simple interface
        VBox root = new VBox(5);
        root.setPadding(new Insets(10));
        root.setAlignment(Pos.CENTER);

        // Our StringProperty
        StringProperty stringProperty = new SimpleStringProperty();

        // Label to display our StringProperty
        Label label = new Label();
        label.textProperty().bind(stringProperty);

        // The ComboBox
        ComboBox<String> comboBox = new ComboBox<>();
        comboBox.getItems().addAll("Zero", "One", "Two", "Three", "Four", "Five");

        // Bind the ComboBox value to that of the StringProperty, and vice versa
        comboBox.valueProperty().bindBidirectional(stringProperty);

        // A button to programmatically change the StringProperty
        Button button = new Button("Return to Zero");
        button.setOnAction(e -> stringProperty.set("Zero"));

        root.getChildren().addAll(comboBox, label, button);

        // Show the Stage
        primaryStage.setWidth(300);
        primaryStage.setHeight(300);
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...