JavaFX проблема перетаскивания между списками - PullRequest
0 голосов
/ 19 января 2020

Вот моя проблема: я пытаюсь переместить 2 элемента из списка в другой. События setOnDragDectected и setOnDragDone работают, но не другие. Похоже, что событие, привязанное к моей цели (listeAdmis), не работает. Я поместил некоторую трассировку печати, чтобы проверить, какие события «активны», но работает только то, что я упомянул.

GUI содержит два списка, и я пытаюсь передать элемент Student из listCandidat к списку Admis.

package Application;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.effect.BlendMode;
import javafx.scene.input.*;

import java.net.URL;
import java.util.ResourceBundle;

public class ControllerListeCandidatFinale implements Initializable {
    public ListView<Student> listeCandidat;
    public ListView listeAdmis;
    public Button validerListeAdmis;


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

        TestRemplissage testRemplissage = new TestRemplissage();

        listeCandidat.setItems(testRemplissage.getC1().getStudents());
        //listeAdmis.setItems(testRemplissage.getC2().getStudents());

        listeCandidat.setCellFactory(listView -> new CellFactoryStudent());
        listeAdmis.setCellFactory(studentListView -> new CellFactoryStudent());

        initializeListeners();


    }

    private void initializeListeners() {
        listeCandidat.setOnDragDetected(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                System.out.println("setOnDragDetected");
                Dragboard dragboard = listeCandidat.startDragAndDrop(TransferMode.MOVE);
                ClipboardContent content = new ClipboardContent();
                content.putString(listeCandidat.getSelectionModel().getSelectedItem().getNom());
                dragboard.setContent(content);
            }
        });
        listeCandidat.setOnDragDone(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent dragEvent) {
                System.out.println("setOnDragDone");

            }
        });
        listeAdmis.setOnDragEntered(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent dragEvent) {
                System.out.println("setOnDragEntered");
                listeAdmis.setBlendMode(BlendMode.DIFFERENCE);
            }
        });
        listeAdmis.setOnDragExited(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent dragEvent) {
                System.out.println("setOnDragExited");
                listeAdmis.setBlendMode(null);
            }
        });
        listeAdmis.setOnDragOver(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent dragEvent) {
                System.out.println("setOnDragOver");
                dragEvent.acceptTransferModes(TransferMode.MOVE);
            }
        });
        listeAdmis.setOnDragDropped(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent dragEvent) {
                System.out.println("setOnDragDropped");
               listeAdmis.getItems().add(listeCandidat.getSelectionModel().getSelectedItem());
               dragEvent.setDropCompleted(true);
            }
        });
    }


}

...