Получить ID из выпадающего списка (Java) - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть модель с именем переменной и идентификатором. У меня есть выпадающий список, к этому списку я добавляю имя из модели. сделав это:

ObservableList<String> personList = FXCollections.observableArrayList();
personList.add(model.getName);
ComboBox box = new ComboBox(personList);

Это работает, но теперь, когда пользователь выбирает имя, я хотел бы получить идентификатор. Как я мог это сделать? Я не могу создать цикл for, который проходит через «моделлист» и ищет имя, поскольку имя НЕ уникально.

1 Ответ

0 голосов
/ 01 ноября 2018

Измените тип элемента ComboBox на тип, содержащий идентификатор и имя. (Кстати, использование необработанного типа - плохая практика.) Используйте пользовательский cellFactory для правильного отображения элементов. Это позволяет вам получить объект, содержащий всю необходимую информацию, через свойство value вашего ComboBox:

@Override
public void start(Stage primaryStage) {
    class Item {
        final int id;
        final String text;

        public Item(int id, String text) {
            this.id = id;
            this.text = text;
        }

    }

    ComboBox<Item> comboBox = new ComboBox<>();
    for (int i = 0; i < 26*2; i++) {
        comboBox.getItems().add(new Item(i, Character.toString((char) i % ('Z' - 'A' + 1) + 'A')));
    }

    class ItemCell extends ListCell<Item> {

        @Override
        protected void updateItem(Item item, boolean empty) {
            super.updateItem(item, empty);

            setText(item == null ? "" : item.text);
        }

    }

    comboBox.setCellFactory(lv -> new ItemCell());
    comboBox.setButtonCell(new ItemCell());

    comboBox.valueProperty().addListener((o, oldValue, newValue) -> {
        System.out.format("%02d: %s\n", newValue.id, newValue.text);
    });

    StackPane root = new StackPane(comboBox);

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