Моя проблема в том, что мне нужен тот пользователь, который не может знать «id_column» из базы данных в tableview, но мне нужно его, чтобы иметь возможность удалять/обновлять автомобиль из выбранной строки.JavaFX hide id column
Пример:
- Пользователь выбирает определенную строку с автомобилем в Tableview и толчок "delete_button". Теперь у меня проблема, потому что мне нужен id, чтобы удалить автомобиль из базы данных (здесь может быть более одного автомобиля с одинаковыми атрибутами) , но пользователь не может позволить увидеть эту колонку.
id || name || cost
1 car1 34.30
2 car1 34.30
3 car2 34.30
4 car3 55.00
в
name || cost
car1 34.30
car1 34.30
car2 34.30
car3 55.00
какие-либо идеи?
EDIT
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
public class HomeController implements Initializable {
private Student studentToDelete = null;
@FXML private TableView<Student> table;
@FXML private TableColumn<Student, Integer> id;
@FXML private TableColumn<Student, String> name;
@FXML private TableColumn<Student, String> surname;
@FXML private TableColumn<Student, Integer> age;
public ObservableList<Student> list = FXCollections.observableArrayList(
new Student(1,"dupa","nazwisko",32),
new Student(2,"afuj","nazwisko",23)
);
DataBase db = new DataBase();
public ObservableList<Student> lista = FXCollections.observableArrayList(db.getAllStudents());
@Override
public void initialize(URL location, ResourceBundle resources) {
id.setCellValueFactory(new PropertyValueFactory<Student, Integer>("id"));
name.setCellValueFactory(new PropertyValueFactory<Student, String>("name"));
surname.setCellValueFactory(new PropertyValueFactory<Student, String>("surname"));
age.setCellValueFactory(new PropertyValueFactory<Student, Integer>("age"));
table.setItems(lista);
}
@FXML
private void initialize() {
// Listen for selection changes
table.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Student>() {
@Override
public void changed(ObservableValue<? extends Student> observable, Student oldValue, Student newValue) {
studentToDelete = newValue;
}
});
}
@FXML
private void deleteClicked() // or whatever your onAction handler is
{
if (studentToDelete != null)
{
System.out.println("test");
}
}
}
Теперь он должен выглядеть?
Возможно, вы захотите удалить тег sqlite из своих вопросов, поскольку реализация базы данных не имеет отношения к вашему вопросу. –
Просто удалите столбец с идентификатором. Также не нужно использовать прослушиватель для назначения выбранного значения в поле. Просто получите его, когда это необходимо: 'table.getSelectionModel(). GetSelectedItem()' – fabian