我正在研究javaFX上事件处理程序的机制,但我不确定我是否理解了它,事实上我有一点怀疑:如果我有两个对象,它们有处理事件的所有必要代码(EventHandler接口ECC..),它们属于同一stackPane,问题是:有没有一种方法让第一个对象启动一个事件(例如ActionEvent),尽管它们属于同一Pane但将由两个对象处理?因为对于我所理解的“事件路线”来说,这是不可能的,至少是直接的。实质上我的小程序有一个splitpane将屏幕分成两个stackpane,在左边的面板上我放了一个带有按钮的gridpane,它们每个都有允许绘制不同形状的功能,在右边的面板上有一个画布。
我的想法是在每个按钮的setonaction中启动一个ActionEvent,在画布上实现EventHandlers,用相应的handle方法捕获事件,并在handle模式下判断点击了哪个按钮以绘制正确的形状。有人能帮帮我吗?不管怎样,多谢了
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是一个很好例子