2017-09-30 8 views
0

J'essaye d'implémenter deux bouton dans une colonne dans la vue de table dans javafx. Je suis capable d'implémenter un bouton dans une colonne mais je ne peux pas ajouter deux boutons dans une colonne. Je suis une idée de ce lienAjouter deux bouton dans une colonne et obtenir la valeur de ligne de clic javafx

How to add button in JavaFX table view

Add a button to a cells in a TableView (JAVAFX)

How to add two buttons in a TableColumn of TableView JavaFX

J'utiliser l'idée dans le lien ci-dessus. Cependant, le code ne fonctionne pas pour moi.

TableColumn<Student, String> firstCol = new TableColumn<Student, String>("ID"); 
    TableColumn<Student, String> secondCol = new TableColumn<Student, String>("Name"); 
    TableColumn<Student, String> thirdCol = new TableColumn<Student, String>("Quiz Mark"); 
    TableColumn<Student, String> forthCol = new TableColumn<Student, String>("A1"); 
    TableColumn<Student, String> fifthCol = new TableColumn<Student, String>("A2"); 
    TableColumn<Student, String> sixthCol = new TableColumn<Student, String>("A3"); 
    TableColumn<Student, String> sevenCol = new TableColumn<Student, String>("Exam"); 
    TableColumn<Student, String> eightCol = new TableColumn<Student, String>("Result"); 
    TableColumn<Student, String> nineCol = new TableColumn<Student, String>("Grade"); 
    TableColumn<Student, Student> tenthCol = new TableColumn<Student, Student>("Action"); 


firstCol.setCellValueFactory(new PropertyValueFactory<>("Id")); 
    secondCol.setCellValueFactory(new PropertyValueFactory<>("Name")); 
    thirdCol.setCellValueFactory(new PropertyValueFactory<>("QuizMark")); 
    forthCol.setCellValueFactory(new PropertyValueFactory<>("Assingment1Mark")); 
    fifthCol.setCellValueFactory(new PropertyValueFactory<>("Assingment2Mark")); 
    sixthCol.setCellValueFactory(new PropertyValueFactory<>("Assingment3Mark")); 
    sevenCol.setCellValueFactory(new PropertyValueFactory<>("ExamMark")); 
    eightCol.setCellValueFactory(new PropertyValueFactory<>("Result")); 
    nineCol.setCellValueFactory(new PropertyValueFactory<>("Grade")); 
    tenthCol.setCellFactory(param -> new TableCell<Student, Student>() { 
     private final Button editButton = new Button("edit"); 
     private final Button deleteButton = new Button("delete"); 
     HBox pane = new HBox(deleteButton, editButton); 

     @Override 
     protected void updateItem(Student patient, boolean empty) { 
      super.updateItem(patient, empty); 

      if (patient == null) { 
       setGraphic(null); 
       return; 
      } 

      deleteButton.setOnAction(event -> { 
       Student getPatient = getTableView().getItems().get(getIndex()); 
       System.out.println(getPatient.getId() + " " + getPatient.getName()); 
      }); 

      editButton.setOnAction(event -> { 
       Student getPatient = getTableView().getItems().get(getIndex()); 
      }); 
      pane.getChildren().addAll(deleteButton,editButton); 
      setGraphic(pane); 
     } 
    }); 

image to describe the text

Dans, les boutons de la colonne d'action n'a pas apparaît. Où suis-je en train de faire une erreur? S'il vous plaît, faites-le moi savoir.

Répondre

0

Manquant un cellValueFactory l'élément pour les cellules dans tenthColumn est toujoursnull. Utilisez le deuxième argument de la méthode updateItem pour déterminer si la ligne est vide ou non.

Aussi pour indiquer ceci je changerais le type de la colonne en TableColumn<Student, Void>.

De plus en ajoutant les enfants du HBox à nouveau à chaque fois que l'élément est modifié n'est pas nécessaire que la mise à jour est les gestionnaires onAction, puisque getIndex() est évalué au moment de la Button cliquez dessus.

Vous pouvez changer le code à ceci:

TableColumn<Student, Void> tenthCol = new TableColumn<>("Action"); 

... 

tenthCol.setCellFactory(param -> new TableCell<Student, Void>() { 
    private final Button editButton = new Button("edit"); 
    private final Button deleteButton = new Button("delete"); 
    private final HBox pane = new HBox(deleteButton, editButton); 

    { 
     deleteButton.setOnAction(event -> { 
      Student getPatient = getTableView().getItems().get(getIndex()); 
      System.out.println(getPatient.getId() + " " + getPatient.getName()); 
     }); 

     editButton.setOnAction(event -> { 
      Student getPatient = getTableView().getItems().get(getIndex()); 
     }); 
    } 

    @Override 
    protected void updateItem(Void item, boolean empty) { 
     super.updateItem(item, empty); 

     setGraphic(empty ? null : pane); 
    } 
});