ChrisR
ChrisR

Reputation: 35

(How to) .setOnMouseClicked overwrite former event and return to old event?

I have a stack of (game) cards. Three of them are displayed (gui), horizontal as rectangle objects,javaFx. At default i can go through the cards by clicking the left or the right card. The single rectangles are setOnMouseClicked in my FXML file. Each of them has is own ID -> (fstCard,scdCard,trdCard). Next to the rectangles is a button "Choose Card". Now, if i press this button i had to choose one of these displayed cards and i want activate a method and return to the default setOnMouseClicked. To activate the "Choose button" :

public void switchChooseDevCard(MouseEvent event) {


    if(event.getSource().equals(chooseButton)){

        fstDeve.setOnMouseClicked(event1 -> System.out.print("hello"));
 **----->> how can i return to the default ?**
    }

    if (event.getSource().equals(fstCard)) {
        ba = devCardStack.size() - 1;
        if (devCardStack.size() <= 3) {
            giveTooltip();
        } else if (devCardStack.size() > 3) {
            int passages = devCardStack.size();
            fstDeve.setFill(scdDeve.getFill());
            scdDeve.setFill(trdDeve.getFill());

            if (a >= 3 && a < passages) {
                trdDeve.setFill(devCardStack.get(a));
                a++;
                giveTooltip();
            } else if (a == passages) {
                a = 0;
                trdDeve.setFill(devCardStack.get(a));
                a++;
                giveTooltip();
            } else {
                trdDeve.setFill(devCardStack.get(a));
                a++;
                giveTooltip();
            }
        }
    }  *rest of the code*

Thanks!!

Upvotes: 1

Views: 1509

Answers (2)

user7291698
user7291698

Reputation: 1990

You can store the handler in a temporary variable and restore it later when needed:

    Button btn = new Button("Test");

    //default event handler
    btn.setOnMouseClicked(new EventHandler<Event>() {
        @Override
        public void handle(Event event) {
            System.out.println("hello");
        }
    });

    //store default event handler
    EventHandler<Event> oldHandler = (EventHandler<Event>) btn.getOnMouseClicked();

    //set new event handler
    btn.setOnMouseClicked(new EventHandler<Event>() {
        @Override
        public void handle(Event event) {
            System.out.println("test");
        }
    });

    //restore default event handler
    btn.setOnMouseClicked(oldHandler);

Upvotes: 1

ChrisR
ChrisR

Reputation: 35

fixed it: Just call the default method..

fstDeve.setOnMouseClicked(event1 -> switchChooseDevCard(event1));

Upvotes: 0

Related Questions