为了账号安全,请及时绑定邮箱和手机立即绑定

从组合框中获取 ID (java)

从组合框中获取 ID (java)

慕莱坞森 2021-12-22 19:24:44
我有一个带有变量名称和 ID 的模型。我有一个组合框,我向这个组合框添加了模型中的名称。通过做这个:ObservableList<String> personList = FXCollections.observableArrayList();personList.add(model.getName);ComboBox box = new ComboBox(personList);这有效,但现在当用户选择名称时,我想检索 ID。我怎么能这样做?我无法创建一个通过“模型列表”并查找名称的 for 循环,因为名称不是唯一的。
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

将 的元素类型更改为ComboBox包含 id 和 name 的类型。(顺便说一句,使用原始类型是不好的做法。)使用自定义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();

}


查看完整回答
反对 回复 2021-12-22
  • 1 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信