我有一个ListView,里面充满了艺术品名称(来自SQLite数据库),这些是字符串,名称不是主键(不是唯一的)。当然,每个艺术品都有自己的ID (主键)。
我要做的是,从这个列表中选择一个艺术品,并将其作为字符串参数传递给一个按钮,它会创建额外的信息(这不是这个问题所必需的)。
但是我选择了名字,现在我需要从这个选择的艺术品获得ID作为外键。
当然,我可以创建这样的select查询:
"select * from Artwork where Name = ?";然后从带有这个名字的艺术品中获取ID,但是正如我前面所说的,可以有多个同名的艺术品,所以这是不好的。
我所拥有的计划B是在ListView中显示这些艺术品的ID,然后如果您选择一个艺术品,您可以在" "上分割字符串,并使用包含ID的list参数进行处理。
但这感觉不对。
谢谢!我希望你能理解我所需要的,如果不是,我可以提供代码,但确实有很多。
发布于 2016-03-27 14:23:09
您正在混淆列表视图(数据)中显示的内容和显示它的方式(视图)。您希望数据由既包含id又包含名称的对象组成。您希望视图只显示这些对象的名称。
创建一个表示包含id和名称的Artwork的类:
public class Artwork {
private final int id ;
private final String name ;
public Artwork(int id, String name) {
this.id = id ;
this.name = name ;
}
public String getName() {
return name ;
}
public int getId() {
return id ;
}
}让数据库代码返回一个Artwork对象列表,并定义列表视图:
ListView<Artwork> listView = new ListView<>();
listView.getItems().addAll(getArtworkFromDatabase());最后,要配置列表视图的显示方式,请设置单元格工厂:
listView.setCellFactory(lv -> new ListCell<Artwork>() {
@Override
public void updateItem(Artwork artwork, boolean empty) {
super.updateItem(artwork, empty) ;
setText(empty ? null : artwork.getName());
}
}现在,您可以从所选项中获取所需的任何数据:
Artwork selected = listView.getSelectionModel().getSelectedItem();
int selectedId = selected.getId();
String selectedName = selected.getName();https://stackoverflow.com/questions/36248348
复制相似问题