У меня есть некоторые проблемы при попытке получить первое значение столбца выбранной строки в виде таблицы. Я заселить мои данные таблицы динамически:Выбор строки из таблицы
private TableView<Category> viewCategory = new TableView<>();
public List<Category> populateCategoryTable() {
List ll = new LinkedList();
try {
db.getConnection();
String sql = "SELECT * FROM sm_category";
ResultSet rs = null;
// Call readRequest to get the result
rs = db.readRequest(sql);
while (rs.next()) {
String ID = rs.getString("categoryID");
String name = rs.getString("categoryName");
String desc = rs.getString("categoryDescription");
Category row = new Category();
row.setid(ID);
row.setname(name);
row.setdesc(desc);
ll.add(row);
}
rs.close();
} catch (SQLException ex) {
ex.printStackTrace();
System.out.println("Error SQL!!!");
System.exit(0);
}
return ll;
}
public class Category {
private SimpleStringProperty ID;
private SimpleStringProperty name;
private SimpleStringProperty desc;
public void setid(String value) {
IDProperty().set(value);
}
public String getid() {
return IDProperty().get();
}
public SimpleStringProperty IDProperty() {
if (ID == null) {
ID = new SimpleStringProperty(this, "ID");
}
return ID;
}
public void setname(String value) {
nameProperty().set(value);
}
public String getname() {
return nameProperty().get();
}
public SimpleStringProperty nameProperty() {
if (name == null) {
name = new SimpleStringProperty(this, "name");
}
return name;
}
public void setdesc(String value) {
descProperty().set(value);
}
public String getdesc() {
return descProperty().get();
}
public SimpleStringProperty descProperty() {
if (desc == null) {
desc = new SimpleStringProperty(this, "desc");
}
return desc;
}
}
И когда выбрана строка, я выполняю это на мой взгляд таблицы:
viewCategory.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
// this method will be called whenever user selected row
@override
TableView.TableViewSelectionModel selectionModel = viewCategory.getSelectionModel();
ObservableList selectedCells = selectionModel.getSelectedCells();
TablePosition tablePosition = (TablePosition) selectedCells.get(0);
int row = tablePosition.getRow(); // yields the row that the currently selected cell is in
}
);
Однако, я получил сообщение об ошибке:
<anonymous shopManagement.boundary.RetrieveProductUI$1> is not abstract and does not override abstract method changed(ObservableValue,Object,Object) in ChangeListener
и я понятия не имею, почему. Кто-нибудь может помочь?
Обновлено Порция
viewCategory.getSelectionModel().setCellSelectionEnabled(true);
viewCategory.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); // just in case you didnt already set the selection model to multiple selection.
viewCategory.getSelectionModel().getSelectedCells().addListener(new ListChangeListener<TablePosition>() {
@Override
public void onChanged(Change<? extends TablePosition> change) {
TableView.TableViewSelectionModel selectionModel = viewCategory.getSelectionModel();
ObservableList selectedCells = selectionModel.getSelectedCells();
TablePosition tablePosition = (TablePosition) selectedCells.get(0);
int row = tablePosition.getRow(); // yields the row that the currently selected cell is in
System.out.println(row);
}
});
мне удалось отобразить данные, но я просто не могу получить выбранную строку. Это дает мне сообщение об ошибке, которое:
IndexOutOfBoundsException: Индекс: 0 Размер: 0
Вы имеете в виду помещение внутри слушателя изменений? –
Я отредактирую свой ответ с полным кодом. EDIT: мой код внутри метода 'changed (...)' возвращает вам значение в первом столбце в выбранной строке. – Federico
После добавления этих кодов возникает целая куча ошибок. не подходящий метод нашел для AddListener (<анонимного ChangeListener>) метод ObservableValue.addListener (ChangeListener супер RetrieveProductUI.Category>) не применяется (фактический аргумент <анонимный ChangeListener > не может быть преобразован в ChangeListener супер RetrieveProductUI. Категория> путем преобразования вызова метода) метод Observable.addListener (InvalidationListener) не применяется –