2016-03-27 26 views
0

我有填充有艺术作品的名称(从SQLite数据库)一个ListView获得ID,这些都是字符串和名称不主键(不是唯一的)。当然每件艺术品都有自己的ID(主键)。JavaFX的SQLite的选自ListView的元素

我做什么,我从此列表中选择一个作品,它作为一个字符串传递参数的按钮,从而带来新的信息(即时并不需要对这个问题)。

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

当然我可以创建这样一个选择查询:

"select * from Artwork where Name = ?"; 

,然后从这个名字的作品获得ID,但正如我之前说的,也可以是多个作品名称相同,所以这不好。

我的计划B是在ListView中显示艺术品的ID,然后如果您选择一个艺术品,您可以切分字符串" "并采用包含该ID的列表参数进行处理。

但是,这感觉不对。

谢谢!我希望你明白我需要什么,如果不是我能提供的代码,但真的有很多。

回答

2

你感到困惑什么它是如何显示(视图)显示在列表视图(数据)。您希望数据由包含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(); 
+0

呀那的伎俩,只是隐藏了ID在ListView,但其仍然存在。我的计划B的修改,非常感谢!现在就试试吧, – Roman