2017-09-30 2 views
0

Ich versuche, zwei Schaltflächen in einer Spalte in der Tabellenansicht in javafx zu implementieren. Ich bin in der Lage, eine Schaltfläche in einer Spalte zu implementieren, aber nicht in der Lage, zwei Schaltflächen in einer Spalte hinzuzufügen. Ich habe eine Vorstellung von diesem LinkFügen Sie zwei Schaltflächen in einer Spalte hinzu und erhalten Sie den Klickzeilenwert 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

ich die Idee in den obigen Link verwenden. Der Code funktioniert jedoch nicht für mich.

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

In, wird die Aktionsspalte Tasten erscheint nicht. Wo mache ich Fehler? Bitte lass es mich wissen.

Antwort

0

eine cellValueFactory die Position für die Zellen in tenthColumn fehlt immernull. Verwenden Sie das zweite Argument der updateItem-Methode, um festzustellen, ob die Zeile leer ist oder nicht.

Auch um dies anzuzeigen, würde ich den Typ der Spalte zu TableColumn<Student, Void> ändern.

Zugabe Darüber hinaus sind die Kinder der HBox jedes Mal wieder das Element geändert wird, ist nicht erforderlich, wie die onAction Handler aktualisieren, da getIndex() zu dem Zeitpunkt ausgewertet wird die Button geklickt wird.

Sie können den Code dieses ändern:

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); 
    } 
}); 
Verwandte Themen