Listener nie czyta zmian

0

Witam,

Mam taki problem.
Chcę aby w przypadku zmiany (dodania elementu do tableView) wykonywala sie jakas akcja.. niestety, program nie rejestruje zmian :

     @Override
    public void initialize(URL url, ResourceBundle rb) {

        ContenuPane.setDisable(true);
        TableauMembres.getItems().clear();
        // TODO       
        PanneauArbreGraph.getSelectionModel().selectedIndexProperty().addListener((observable, oldValue, newValue) -> {
            if (PanneauArbreGraph.getTabs().size() == 0) {
                TableauMembres.getItems().clear();
                affichageInfoFamille(true, 1);
                ContenuPane.setDisable(true);
            } else {
                ContenuPane.setDisable(false);
                /*
                 Ajout membres dans le tableaau
                 */
                affichageInfoFamille(false, (int) newValue);
                TableauMembres.setItems(FamillesListe.get((int) newValue).ReturnListF());     
              
            }
        });
        
      
        
        TableauMembres.getItems().addListener(new ListChangeListener< Membres > () { 

            @Override
            public void onChanged(ListChangeListener.Change<? extends Membres> c) {
             System.out.println("Changed");
            
            }
            
        });
                   
    
     
        SimNomT.setCellValueFactory(cellData -> cellData.getValue().getNoms());
        SimPrenomT.setCellValueFactory(cellData -> cellData.getValue().getPrenoms());

    }

}

ReturListF to observableList typu Membres.

0

Siema,

Twój program rejestruje zmiany, tylko informacja o nich nie jest przesyłana.
Chodzi o to, że update events są opcjonalne i trzeba wzbogacić observableList o extractor.

Napisałem coś na szybko, może pomoże :)

public class Listener extends Application {

	
	private final TableView<Members> table = new TableView<>();
	ObservableList<Members> data = FXCollections.observableArrayList((Members member) -> 
	new Observable[] {member.nameProperty()});
	
	public class Members {
	    private final StringProperty name = new SimpleStringProperty();
	    private final StringProperty lastName = new SimpleStringProperty();
	    
	    public Members(String name,String lastName) {
	        nameProperty().set(name);
	        lastNameProperty().set(lastName);
	    }

	    public StringProperty nameProperty() {
	        return name ;
	    }
	    public StringProperty lastNameProperty() {
	        return lastName ;
	    }
	    public final String getName() {
	        return nameProperty().get();
	    }
	    public final void setName(String name) {
	        nameProperty().set(name);
	    }
	}	    
	    	    
	    public void start(Stage stage) {
	        Scene scene = new Scene(new Group());
	        stage.setWidth(450);
	        stage.setHeight(500);
	 
	        data.addAll(new Members("Zbyszek","Twardzioch"),
	        		    new Members("Zocha","Klucha"));
	 
	        data.addListener((Change<? extends Members> change) -> {           
	                    System.out.println("Dziala ;)");
	        });
	        
	        table.setEditable(true);	
	        
	   
	        TableColumn<Members, String> memberNames = new TableColumn<>("First Name");
	        memberNames.setMinWidth(100);
	        memberNames.setCellValueFactory(
	                new PropertyValueFactory<>("name"));
	        
	        memberNames.setCellFactory(TextFieldTableCell.<Members>forTableColumn());
	        memberNames.setOnEditCommit(
	            (CellEditEvent<Members, String> t) -> {
	                ((Members) t.getTableView().getItems().get(
	                    t.getTablePosition().getRow())
	                    ).setName(t.getNewValue());
	        });
	        
	        TableColumn<Members, String> memberLastNames = new TableColumn<>("Last Name");
	        memberLastNames.setMinWidth(200);
	        memberLastNames.setCellValueFactory(
	                new PropertyValueFactory<>("lastName"));
	        
	        memberLastNames.setCellFactory(TextFieldTableCell.<Members>forTableColumn());
	        memberLastNames.setOnEditCommit(
	            (CellEditEvent<Members, String> t) -> {
	                ((Members) t.getTableView().getItems().get(
	                    t.getTablePosition().getRow())
	                    ).setName(t.getNewValue());
	        });
	        
	        
	        table.setItems(data);
	        table.getColumns().addAll(memberNames,memberLastNames);

	        ((Group) scene.getRoot()).getChildren().addAll(table);
	 
	        stage.setScene(scene);
	        stage.show();
	    }
	public static void main(String[] args) {
	        launch(args);
	    }

}
0

no wlansie nie jestem pewna czy tu lezy problem.

Poprzedni Listenner dziala poprawnie.. malo tego, jezeli przesune listenner TableView ( TableauMembres) zaraz pod linijke w której daje setitems to wtedy dziala prawie poprawnie...
Prawie tzn, ze gdy otworze 2 zakladki to funkcja wywola sie 2 razy, gdy 4 to 4 itd.. i to mnie troche martwi

0

Przepraszam, źle Cię zrozumiałem. Myślałem że chodzi Ci o reakcje na jakieś zdefiniowane zmiany. A nie o reakcje na tę konkretną zmianę dodawania danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1