Хочу сделать так, чтобы можно было редактировать данные прямо в таблице. Но при вызове методы setOnEditCommit для обоих столбцов пишет: неверный параметр в лямбда-вырадении, ожидает Event а видит CellEditEvent.
package controllers;
import javafx.beans.value.ObservableValue;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellEditEvent;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.util.Callback;
import objects.Word;
public class Controller {
@FXML
public TableColumn wordCol;
@FXML
public TableColumn translateCol;
@FXML
public TableView table;
@FXML
private void initialize() {
table.setEditable(true);
Callback<TableColumn<Word, String>, TableCell<Word, String>> cellFactory = (TableColumn<Word, String> tc) -> new EditingCell();
wordCol.setCellValueFactory(new PropertyValueFactory<>(""));
wordCol.setCellFactory(cellFactory);
wordCol.setOnEditCommit((CellEditEvent<Word, String> e) -> {
((Word) e.getTableView().getItems().get(e.getTablePosition().getRow())).setWord(e.getNewValue());
});
translateCol.setCellValueFactory(new PropertyValueFactory<>(""));
translateCol.setCellFactory(cellFactory);
translateCol.setOnEditCommit((CellEditEvent<Word, String> e) -> {
((Word) e.getTableView().getItems().get(e.getTablePosition().getRow())).setTranslate(e.getNewValue());
});
}
class EditingCell extends TableCell<Word, String> {
private TextField textField;
public EditingCell(){}
@Override
public void startEdit() {
if(!isEmpty()) {
super.startEdit();
createTextField();
setText(null);
setGraphic(textField);
textField.selectAll();
}
}
@Override
public void cancelEdit() {
super.cancelEdit();
setText((String) getItem());
setGraphic(null);
}
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (isEditing()) {
if (textField != null) {
textField.setText(getString());
}
setText(null);
setGraphic(textField);
} else {
setText(getString());
setGraphic(null);
}
}
}
private void createTextField() {
textField = new TextField(getString());
textField.setMinWidth(this.getWidth() - this.getGraphicTextGap()* 2);
textField.focusedProperty().addListener(
(ObservableValue<? extends Boolean> arg0,
Boolean arg1, Boolean arg2) -> {
if (!arg2) {
commitEdit(textField.getText());
}
});
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
}
}
Вот класс Word
public class Word {
private SimpleStringProperty word;
private SimpleStringProperty translate;
public Word(String word, String translate) {
this.word = new SimpleStringProperty(word);
this.translate = new SimpleStringProperty(translate);
}
public Word() {
this.word = new SimpleStringProperty(null);
this.translate = new SimpleStringProperty(null);
}
public String getWord() {
return word.get();
}
public SimpleStringProperty wordProperty() {
return word;
}
public void setWord(String word) {
this.word.set(word);
}
public String getTranslate() {
return translate.get();
}
public SimpleStringProperty translateProperty() {
return translate;
}
public void setTranslate(String translate) {
this.translate.set(translate);
}
}
Параметризуйте колонки wordCol
и translateCol
параметрами <Word, String>
.
Вместо ((Word) e.getTableView().getItems().get(e.getTablePosition().getRow())).setBlaBlaBla
сделайте так:
if (e.getTablePosition() != null) {
e.getRowValue().setBlaBlaBla(e.getNewValue);
}
UPDATE
Вам необходимо написать так
@FXML
public TableColumn<Word, String> wordCol;
@FXML
public TableColumn<Word, String> translateCol;
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Пытайюсь задеплоить приложение Spring Boot на PayaraВот что получаеться в итоге:
Всем привет, я попытался создать проект в котором можно создать себе аккаунт и потом усуществлять все возможные операции CRUD над класом Product...