2016-03-27 25 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