Вы получаете доступ к ResultSet
таким образом, что для каждой строки вы добавляете элемент для каждого из столбцов.Вам необходимо добавить по одному элементу для каждой строки, которую вы хотите отобразить в ListView
, т.е. в этом случае по одному элементу в строке в ResultSet
.
, поскольку вы хотите, чтобы ID
былчтобы получить доступ, вы должны создать пользовательский тип, содержащий значения для обеих строк (или использовать существующий класс, например Pair
), и использовать cellFactory
для выбора данных для отображения.
public class EmployeeDivision {
private final long id; // or maybe String/int as type?
private final String name;
public EmployeeDivision (long id, String name) {
this.id = id;
this.name = name;
}
/* getters */
}
ListView<EmployeeDivision> menuList1;
menuList1.setCellFactory(lv -> new ListCell<EmployeeDivision>() {
@Override
protected void updateItem(EmployeeDivision item, boolean empty) {
super.updateItem(item, empty);
setText(empty || item == null ? "" : item.getName());
}
});
while (divsResult.next()) {
divisionListRow.add(new EmployeeDivision(divsResult.getLong(1), divsResult.getString(2)));
}
Это позволяет вам получить доступ к идентификатору выбранного элемента следующим образом:
EmployeeDivision selectedItem = menuList1.getSelectionModel().getSelectedItem();
if (selectedItem != null) {
System.out.println("id = " + selectedItem.getId());
} else {
System.out.println("no item selected");
}
Кстати: я рекомендую указывать параметры типа, если у вас нет веской причины использовать необработанный тип,Это позволяет компилятору выполнять некоторые проверки, которые могут привести к проблемам, которые трудно обнаружить, если использовался необработанный тип.