2016-05-28 10 views
1

私の問題は、ユーザがtableviewのデータベースから「id_column」を知ることができないことですが、選択した行から車を削除/更新できるようにする必要があります。JavaFX hide idカラム

例:

  • ユーザーは、テーブルビューとプッシュ "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

idを表示している列を削除するだけです。また、リスナを使用して選択した値をフィールドに割り当てる必要はありません。必要なときに取得してください: '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
​​
関連する問題