2016-05-28 5 views
1

Моя проблема в том, что мне нужен тот пользователь, который не может знать «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"); 
     } 
    } 

} 

Теперь он должен выглядеть?

+0

Возможно, вы захотите удалить тег sqlite из своих вопросов, поскольку реализация базы данных не имеет отношения к вашему вопросу. –

+1

Просто удалите столбец с идентификатором. Также не нужно использовать прослушиватель для назначения выбранного значения в поле. Просто получите его, когда это необходимо: 'table.getSelectionModel(). GetSelectedItem()' – fabian

ответ

0

1) Создайте ссылку на автомобиль, который Вы хотите удалить в таблице класса контроллера:

private CarObject carToDelete = null; 

2) Добавить выбор слушателя в таблицу следующим образом:

@FXML 
private void initialize() { 

// Listen for selection changes 
yourTable.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<CarObject>() { 

     @Override 
     public void changed(ObservableValue<? extends CarObject> observable, 
       CarObject oldValue, CarObject newValue) 
     { 
       carToDelete = newValue; 
     } 
    }); 
} 

3) Теперь, при нажатии на кнопку удаления, просто доступ ссылки carToDelete:

@FXML 
private void deleteClicked() // or whatever your onAction handler is 
{ 
    if (carToDelete != null) 
    { 
     // get the id from carToDelete and delete it... 
    } 
} 
0
supp.setOnAction(e-> { 

    table.getColums.remove(tableColumn); 

});