当前位置: 首页 > 知识库问答 >
问题:

同一窗格对象的事件处理程序

赵朝
2023-03-14

我正在研究javaFX上事件处理程序的机制,但我不确定我是否理解了它,事实上我有一点怀疑:如果我有两个对象,它们有处理事件的所有必要代码(EventHandler接口ECC..),它们属于同一stackPane,问题是:有没有一种方法让第一个对象启动一个事件(例如ActionEvent),尽管它们属于同一Pane但将由两个对象处理?因为对于我所理解的“事件路线”来说,这是不可能的,至少是直接的。实质上我的小程序有一个splitpane将屏幕分成两个stackpane,在左边的面板上我放了一个带有按钮的gridpane,它们每个都有允许绘制不同形状的功能,在右边的面板上有一个画布。

我的想法是在每个按钮的setonaction中启动一个ActionEvent,在画布上实现EventHandlers,用相应的handle方法捕获事件,并在handle模式下判断点击了哪个按钮以绘制正确的形状。有人能帮帮我吗?不管怎样,多谢了

共有1个答案

姬捷
2023-03-14
            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());
    }

}
 类似资料:
  • 我是Java编程的新手,所以这个问题对这里的许多人来说可能听起来很愚蠢。我试图让自己熟悉JavaFX事件处理机制。 我正在开发一个GUI,我希望按钮在单击它时以及按下Enter键时执行相同的功能。 我能做以下事情吗? 然后将它用于两个按键事件

  • 我想在JavaFX中制作一个程序,其中包含一个按钮,单击该按钮时,将创建一个圆并将其添加到形状的ArrayList中。以下是我的代码: 我的问题是-如何从内部句柄方法访问“circle1”?在JavaScript中,我们使用e.currentTarget。 我无法声明“Circle1”最终版本,因为我需要在之后更改它。

  • 在“对象”选项卡,你可以使用 “列表”、“详细信息”和 “ER 图表”按钮来转换对象的视图。 如果你想隐藏列表视图或详细信息视图中的组结构,从菜单栏选择“查看”->“隐藏对象组”。 列表视图 在默认情况下,Navicat 使用“列表”视图。这只显示对象的名字。 详细信息视图 “详细信息”视图以列显示对象的名和属性。若要更改显示属性的列,从菜单栏选择“查看”->“选择列”,并在弹出式窗口中为不同的对

  • 在“对象”选项卡,你可以使用 “列表”、“详细信息”和 “ER 图表”按钮来转换对象的视图。 如果你想隐藏列表视图或详细信息视图中的组结构,从菜单栏选择“查看”->“隐藏对象组”。 列表视图 在默认情况下,Navicat 使用“列表”视图。这只显示对象的名字。 详细信息视图 “详细信息”视图以列显示对象的名和属性。若要更改显示属性的列,从菜单栏选择“查看”->“选择列”,并在弹出式窗口中为不同的对

  • 在“对象”选项卡,你可以使用 “详细信息”和 “ER 图表”按钮来转换对象的查看。 如果你想隐藏详细信息查看中的组结构,从菜单栏选择“查看”->“隐藏对象组”。 详细信息视图 “详细信息”视图以列显示对象的名和属性。若要更改显示属性的列,从菜单栏选择“查看”->“选择列”,并在弹出式窗口中为不同的对象选择要显示的列。 ER 图表视图(仅适用于非 Essentials 版) 【注意】仅适用于 MyS

  • 目前我们看到的输入文件都只包含一种语言,但在实际应用中我们会遇到有些包含多种语言的常用文件格式。例如,Java的文档注释,XML文件等。这些环绕着模板表达式的文本需要不同的处理方式,它们被称为孤岛语言。 ANTLR有提供一个称之为“词法模型”的词法分析器特性,它让我们可以很容易地处理包含混合格式的文件。基本思路是:当词法分析器看到特殊的哨兵字符序列时,让它在模式之间来回切换。 XML是一个很好例子