Events 同一窗格中对象的事件处理程序
我正在研究javaFX上事件处理程序的机制,但我不确定我是否理解它,事实上我有一点怀疑: 如果我有两个对象,它们都有处理事件(EventHandler接口ecc..)所需的所有代码,它们属于同一个stackPane,问题是:第一个对象是否有方法启动一个事件(例如ActionEvent),尽管它们属于同一个窗格,但将由2个对象处理? 因为就我对“事件路线”的理解而言,这是不可能的,至少是直接的。 本质上,我的小程序有一个拆分窗格,将屏幕分为两个堆栈窗格。在左侧面板中,我放置了一个带按钮的网格窗格,每个窗格都具有允许绘制不同形状的功能,在右侧面板中,我使用画布 我的想法是在每个按钮的setonaction中启动一个ActionEvent,在画布上实现EventHandler来捕获事件 使用相对手柄方法,并在手柄模式下区分单击哪个按钮以绘制正确的形状。 有人能帮我吗?无论如何,非常感谢Events 同一窗格中对象的事件处理程序,events,javafx,Events,Javafx,我正在研究javaFX上事件处理程序的机制,但我不确定我是否理解它,事实上我有一点怀疑: 如果我有两个对象,它们都有处理事件(EventHandler接口ecc..)所需的所有代码,它们属于同一个stackPane,问题是:第一个对象是否有方法启动一个事件(例如ActionEvent),尽管它们属于同一个窗格,但将由2个对象处理? 因为就我对“事件路线”的理解而言,这是不可能的,至少是直接的。 本质上,我的小程序有一个拆分窗格,将屏幕分为两个堆栈窗格。在左侧面板中,我放置了一个带按钮的网格窗格,
软件包es1;
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);
}
}
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.event;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.SplitPane;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.StackPane;
导入javafx.stage.stage;
/**
*
*@作者大卫
*/
公共类Es1扩展了应用程序{
@凌驾
公共无效开始(阶段primaryStage){
按钮btn=新按钮();
btn.setText(“说‘你好,世界’”);
btn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
System.out.println(“你好,世界!”);
lanciaevento(this.getClass().toString());
}
});
//在左侧面板上添加一个按钮,在右侧添加一个文本文件,以便在事件启动时进行测试
//单击按钮后,文本字段将到达
Textfield text=新的Textfield();
StackPane Panel 1=新的StackPane();
panel1.getChildren().addAll(btn);
StackPane Panel 2=新的StackPane();
panel2.getChildren().addAll(文本);
splitpane divisiore=新的splitpane();
divisiore.addEventHandler(ActionEvent.ACTION,divisiore);
divisiore.getItems().addAll(panel1、panel2);
场景=新场景(除数,600450);
setTitle(“你好,世界!”);
初级阶段。场景(场景);
primaryStage.show();
}
公共无效lanciaevento(字符串oggetto)
{
ActionEvento=新的ActionEvent();
}
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
发射(args);
}
}
包es1;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.scene.control.SplitPane;
/**
*
*@作者大卫
*/
公共类splitpane扩展splitpane实现EventHandler{
私有字符串消息_事件;
公共字符串get_message()
{
返回(消息\事件);
}
公共无效集_消息(字符串消息)
{
消息\事件=消息;
}
@凌驾
公共无效句柄(ActionEvent事件){
System.out.println(“mi-ha-mandato-un-messaggio”+event.getSource().toString());
}
}
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
包es1;
导入javafx.event.ActionEvent;
javafx.event.EventHandler;
导入javafx.scene.control.TextField;
/**
*
*@作者大卫
*/
公共类Textfield扩展Textfield实现EventHandler{
@凌驾
公共无效句柄(ActionEvent事件){
this.appendText(event.getSource().toString());
}
}
欢迎来到StackOverflow Deen!实际上,不同的javafx控件相互影响是很常见的。只要它们在同一范围内,这是可能的。您能否澄清一下您是如何创建按钮和事件处理程序的?您到底是在使用FXML,还是纯粹在java中使用FXML?此外,这个问题需要一些帮助,以减少文本墙。你能告诉我们你想做什么,你尝试了什么,包括a,以及你得到了什么结果吗?好的,首先谢谢你的回答,我会尝试用一些我编写的小代码来解释,假设这个按钮是我理想的带有一些按钮的网格窗格,文本字段是我的画布,我想在按下的按钮的基础上画一些形状,本质上,我想从按下按钮(setona action)启动一个事件,然后在textfield上处理它(我想在我的应用程序中做的相同事情:按下一个相对形状的按钮来绘制它)。
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());
}
}