Android Java FX 中的适配器替代品
Android adapter alternative in Java FX
我已经搜索了 Google 但没有找到任何有用的信息。
我正在使用 Adapter 组合框到 select name 并得到它的 id。 (不是位置索引,id 来自数据库)在Android。但我不知道如何在 JavaFx 中使用它?
我在来自数据库 id 和 name[=31= 的列表中尝试了 JavaFx POJO ].
我添加到 ObservableList 和 setItems(list.getName())
到组合框。
当 Combobox selected 获取它的位置索引并使用该索引并从列表中获取真实 ID。 list.getID(index)
这是best/correct方式吗?或者 Android 是否有替代 Java FX 的适配器?
您将在 ComboBox
中显示同时包含 name
和 id
的项目,并指定如何将这些项目转换为 String
中显示的 String
=14=].
ComboBox<Item> comboBox = new ComboBox<>();
comboBox.setItems(FXCollections.observableArrayList(new Item("foo", "17"), new Item("bar", "9")));
comboBox.setConverter(new StringConverter<Item>() {
@Override
public Item fromString(String string) {
// converts string the item, if comboBox is editable
return comboBox.getItems().stream().filter((item) -> Objects.equals(string, item.getName())).findFirst().orElse(null);
}
@Override
public String toString(Item object) {
// convert items to string shown in the comboBox
return object == null ? null : object.getName();
}
});
// Add listener that prints id of selected items to System.out
comboBox.getSelectionModel().selectedItemProperty().addListener((ObservableValue<? extends Item> observable, Item oldValue, Item newValue) -> {
System.out.println(newValue == null ? "no item selected" : "id=" + newValue.getId());
});
class Item {
private final String name;
private final String id;
public String getName() {
return name;
}
public String getId() {
return id;
}
public Item(String name, String id) {
this.name = name;
this.id = id;
}
}
当然你也可以使用不同种类的物品,如果那样对你来说更方便的话。例如。 Integer
(= indices in list) 可以使用并且 StringConverter
可以用于将索引转换为列表中的名称(和 id),或者您可以使用 id 作为 [= 的项目14=] 并使用 Map
获取与 StringConverter
.
中的 ID 关联的字符串
如果您想在项目的视觉表示方式上增加更多灵活性,您可以使用 cellFactory 来创建自定义 ListCell
(链接的 javadoc 中有一个示例)。如果将它与 Integer
和 0, 1, ..., itemcount-1
的 ComboBox
一起使用,您可能会非常接近 android Adapter
。但是在这种情况下使用 StringConverter
似乎就足够了。
我已经搜索了 Google 但没有找到任何有用的信息。
我正在使用 Adapter 组合框到 select name 并得到它的 id。 (不是位置索引,id 来自数据库)在Android。但我不知道如何在 JavaFx 中使用它?
我在来自数据库 id 和 name[=31= 的列表中尝试了 JavaFx POJO ].
我添加到 ObservableList 和 setItems(list.getName())
到组合框。
当 Combobox selected 获取它的位置索引并使用该索引并从列表中获取真实 ID。 list.getID(index)
这是best/correct方式吗?或者 Android 是否有替代 Java FX 的适配器?
您将在 ComboBox
中显示同时包含 name
和 id
的项目,并指定如何将这些项目转换为 String
中显示的 String
=14=].
ComboBox<Item> comboBox = new ComboBox<>();
comboBox.setItems(FXCollections.observableArrayList(new Item("foo", "17"), new Item("bar", "9")));
comboBox.setConverter(new StringConverter<Item>() {
@Override
public Item fromString(String string) {
// converts string the item, if comboBox is editable
return comboBox.getItems().stream().filter((item) -> Objects.equals(string, item.getName())).findFirst().orElse(null);
}
@Override
public String toString(Item object) {
// convert items to string shown in the comboBox
return object == null ? null : object.getName();
}
});
// Add listener that prints id of selected items to System.out
comboBox.getSelectionModel().selectedItemProperty().addListener((ObservableValue<? extends Item> observable, Item oldValue, Item newValue) -> {
System.out.println(newValue == null ? "no item selected" : "id=" + newValue.getId());
});
class Item {
private final String name;
private final String id;
public String getName() {
return name;
}
public String getId() {
return id;
}
public Item(String name, String id) {
this.name = name;
this.id = id;
}
}
当然你也可以使用不同种类的物品,如果那样对你来说更方便的话。例如。 Integer
(= indices in list) 可以使用并且 StringConverter
可以用于将索引转换为列表中的名称(和 id),或者您可以使用 id 作为 [= 的项目14=] 并使用 Map
获取与 StringConverter
.
如果您想在项目的视觉表示方式上增加更多灵活性,您可以使用 cellFactory 来创建自定义 ListCell
(链接的 javadoc 中有一个示例)。如果将它与 Integer
和 0, 1, ..., itemcount-1
的 ComboBox
一起使用,您可能会非常接近 android Adapter
。但是在这种情况下使用 StringConverter
似乎就足够了。