Halli hallo,
an alle ein herzliches Hallo! Dies ist mein allererster Beitrag hier und ich bin auch noch nicht so lang in der Informatik unterwegs (aber dafür mit viel Spaß!
Gleich meine Frage:
Ich versuche, mit einem ChangeListener Veränderungen in einer TableView bzw. der hier abgebildeten ObservableList abzuhören. Speziell versuche ich gerade, mit dem Listener mitzubekommen, ob Items gelöscht werden und (falls das geht!!!???) ob sich die Attribute der Items verändern. Ich habe hierfür
benutzt. Seht ihr, was ich falsch mache?
Hier mein Code (ich habe das reale Problem hier als Beispiel nachgebaut):
an alle ein herzliches Hallo! Dies ist mein allererster Beitrag hier und ich bin auch noch nicht so lang in der Informatik unterwegs (aber dafür mit viel Spaß!
Gleich meine Frage:
Ich versuche, mit einem ChangeListener Veränderungen in einer TableView bzw. der hier abgebildeten ObservableList abzuhören. Speziell versuche ich gerade, mit dem Listener mitzubekommen, ob Items gelöscht werden und (falls das geht!!!???) ob sich die Attribute der Items verändern. Ich habe hierfür
tableView.itemsProperty().addListener(new ChangeListener<>()...
benutzt. Seht ihr, was ich falsch mache?
Hier mein Code (ich habe das reale Problem hier als Beispiel nachgebaut):
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
public static void main (String[] args) {
launch (args);
}
public void start (Stage stage) throws Exception {
// Observable List of students
ObservableList<Student> students = FXCollections.observableArrayList();
students.add(new Student ("Anna", "Latin"));
students.add(new Student ("Mike", "history"));
// TableView displaying these students
TableView<Student> tableView = new TableView<>();
TableColumn<Student, String> nameCol = new TableColumn<>();
TableColumn<Student, String> subjectCol = new TableColumn<>();
tableView.getColumns().addAll(nameCol, subjectCol);
nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
subjectCol.setCellValueFactory(new PropertyValueFactory<>("mainSubject"));
tableView.setItems(students);
// Button manipulating students (student items AND students' attributes)
Button buttonRemoveStudent = new Button ("remove one student");
Button buttonChangeSubjects = new Button ("everyone studies computer science");
buttonRemoveStudent.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
//tableView.getItems().remove(0);
students.remove(0);
}
});
buttonChangeSubjects.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
for (Student student : tableView.getItems()) {
student.setMainSubject("computer science");
}
tableView.refresh(); // necessary as it appears ...
}
});
// Listener to check if the student list or its items attributes are changing
tableView.itemsProperty().addListener(new ChangeListener<ObservableList<Student>>() {
@Override
public void changed(ObservableValue<? extends ObservableList<Student>> observable, ObservableList<Student> oldValue, ObservableList<Student> newValue) {
System.out.println("something has changed");
}
});
// Stage and Scene with all the control elements
HBox root = new HBox();
Scene scene = new Scene (root);
stage.setScene(scene);
VBox buttons = new VBox();
buttons.getChildren().addAll(buttonRemoveStudent, buttonChangeSubjects);
root.getChildren().addAll(buttons, tableView);
stage.show();
}
}