首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从选定的JavaFX元素获得ID

从选定的JavaFX元素获得ID
EN

Stack Overflow用户
提问于 2016-03-27 14:16:24
回答 1查看 1.2K关注 0票数 0

我有一个ListView,里面充满了艺术品名称(来自SQLite数据库),这些是字符串,名称不是主键(不是唯一的)。当然,每个艺术品都有自己的ID (主键)。

我要做的是,从这个列表中选择一个艺术品,并将其作为字符串参数传递给一个按钮,它会创建额外的信息(这不是这个问题所必需的)。

但是我选择了名字,现在我需要从这个选择的艺术品获得ID作为外键。

当然,我可以创建这样的select查询:

代码语言:javascript
复制
"select * from Artwork where Name = ?";

然后从带有这个名字的艺术品中获取ID,但是正如我前面所说的,可以有多个同名的艺术品,所以这是不好的。

我所拥有的计划B是在ListView中显示这些艺术品的ID,然后如果您选择一个艺术品,您可以在" "上分割字符串,并使用包含ID的list参数进行处理。

但这感觉不对。

谢谢!我希望你能理解我所需要的,如果不是,我可以提供代码,但确实有很多。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-27 14:23:09

您正在混淆列表视图(数据)中显示的内容和显示它的方式(视图)。您希望数据由既包含id又包含名称的对象组成。您希望视图只显示这些对象的名称。

创建一个表示包含id和名称的Artwork的类:

代码语言:javascript
复制
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对象列表,并定义列表视图:

代码语言:javascript
复制
ListView<Artwork> listView = new ListView<>();
listView.getItems().addAll(getArtworkFromDatabase());

最后,要配置列表视图的显示方式,请设置单元格工厂:

代码语言:javascript
复制
listView.setCellFactory(lv -> new ListCell<Artwork>() {
    @Override
    public void updateItem(Artwork artwork, boolean empty) {
        super.updateItem(artwork, empty) ;
        setText(empty ? null : artwork.getName());
    }
}

现在,您可以从所选项中获取所需的任何数据:

代码语言:javascript
复制
Artwork selected = listView.getSelectionModel().getSelectedItem();
int selectedId = selected.getId();
String selectedName = selected.getName();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36248348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档