Обработчик событий для объектов той же панели - PullRequest
0 голосов
/ 05 июля 2018

Я изучаю механизм обработчика событий на javaFX, но я не уверен, что понял его, на самом деле у меня есть небольшое сомнение: если у меня есть два объекта, у них есть весь необходимый код для обработки события (EventHandler interface ecc ..), который они ПОЛУЧАЮТ в ОДНОМ ЖЕ стеке, вопрос: есть ли способ для 1-го объекта запустить событие (ActionEvent для пример) что будет обрабатываться объектом 2, хотя они принадлежат одной панели? Потому что для того, что я понимаю о «маршруте событий», это невозможно, по крайней мере, напрямую. По сути, моя маленькая программа имеет разделенную панель, которая делит экран на две стеки, на левой панели я поместил сетку с кнопкой, каждая из которых имеет функцию, позволяющую рисовать различные фигуры, на правой панели с холстом. .

Моя идея состояла в том, чтобы запустить ActionEvent в setonaction каждой кнопки, реализует EventHandlers на холсте, чтобы захватить событие с относительным методом управления, и в режиме управления дескрипторами различают, какая кнопка нажата для рисования правильной формы. Кто-нибудь может мне помочь ? В любом случае, большое спасибо

1 Ответ

0 голосов
/ 06 июля 2018
            package es1;

            import javafx.application.Application;
            import javafx.event.ActionEvent;
            import javafx.event.Event;
            import javafx.event.EventHandler;
            import javafx.scene.Scene;
            import javafx.scene.control.Button;
            import javafx.scene.control.SplitPane;
            import javafx.scene.control.TextField;
            import javafx.scene.layout.StackPane;
            import javafx.stage.Stage;

    /**
     *
     * @author DAVIDE
     */
         public class Es1 extends Application {

                @Override
                public void start(Stage primaryStage) {
                Button btn = new Button();
                btn.setText("Say 'Hello World'");
                btn.setOnAction(new EventHandler<ActionEvent>() {

                @Override
                public void handle(ActionEvent event) {
                    System.out.println("Hello World!");
                    lanciaevento(this.getClass().toString());

                }
            });

            //add a button on left panel and a textfiled on the right for test if the event launched
            //on the click of the button is reached by the textfield 
            Textfield text = new Textfield();
            StackPane panel1 = new StackPane();
            panel1.getChildren().addAll(btn);
            StackPane panel2 = new StackPane();
            panel2.getChildren().addAll(text);

            splitpane divisore = new splitpane();
            divisore.addEventHandler(ActionEvent.ACTION, divisore);
            divisore.getItems().addAll(panel1,panel2);


            Scene scene = new Scene(divisore, 600, 450);

            primaryStage.setTitle("Hello World!");
            primaryStage.setScene(scene);
            primaryStage.show();

        }


        public void lanciaevento(String oggetto)
        {
            ActionEvent evento    = new ActionEvent();
        }

        /**
         * @param args the command line arguments
         */


        public static void main(String[] args) {
            launch(args);
        }


       }

            package es1;

            import javafx.event.ActionEvent;
            import javafx.event.EventHandler;
            import javafx.scene.control.SplitPane;

            /**
             *
             * @author DAVIDE
             */
            public class splitpane extends SplitPane implements EventHandler<ActionEvent>{

                private String message_event;



                public String get_message()
                {
                 return(message_event);
                }

                public void set_message(String messaggio)
                {
                 message_event = messaggio;   

                }

                @Override
                public void handle(ActionEvent event) {
                            System.out.println("mi ha mandato un messaggio "+event.getSource().toString());

                }



            }

             /*
     * To change this license header, choose License Headers in Project Properties.

package es1;

   import javafx.event.ActionEvent;
   javafx.event.EventHandler;
   import javafx.scene.control.TextField;

/**
 *
 * @author DAVIDE
 */
public class Textfield extends TextField implements EventHandler<ActionEvent> {


    @Override
    public void handle(ActionEvent event) {
        this.appendText(event.getSource().toString());
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...