每个人 都。我一直在寻找这个问题,但我在这里没有找到它,所以我想它真的很简单。
我正在用JavaFX创建一个非常简单的应用程序,只需一个按钮。现在我想处理它的事件(如按下或释放),但当我在互联网上看到示例时,它们都使用匿名类(每个事件都有一个不同的类),这在我看来让代码变得肮脏。这就是为什么我想将事件处理程序放在一个单独的类中,并将它们添加到按钮中。
问题是我不知道我是否必须为每个事件创建一个不同的类,我认为这并不酷。所以我想出了一个主意。在类的 handle()
方法中,我检查正在发生哪种类型的事件并对其进行处理。这是代码
主类
public class Main extends Application{
Button button;
PruebaEventHandler evhandler;
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception{
primaryStage.setTitle("h0i");
button = new Button("Púlsame!");
evhandler = new PruebaEventHandler();
button.addEventHandler(MouseEvent.ANY, evhandler);
StackPane layout = new StackPane();
layout.getChildren().add(button);
Scene scene = new Scene(layout, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
}
EventHandler类
public class PruebaEventHandler implements EventHandler<MouseEvent>{
@Override
public void handle(MouseEvent event){
if(event.getEventType().equals(MouseEvent.MOUSE_PRESSED)){
System.out.printf("Te cogí\n");
}
if(event.getEventType().equals(MouseEvent.MOUSE_RELEASED)){
System.out.printf("\nMe ha soltado!!!");
}
}
}
我不知道这是非常低效还是糟糕的编程风格,但这是我目前为止想到的唯一解决方案。所以我想问你这是不是一个好的解决方案,或者,如果有更好的解决方案,请告诉我!先谢了。
已经有一个解决方案,它正在创建一个带有FXML文件,控制器和Main类的JavaFX项目。像IntelliJ和NetBeans这样的IDE支持让你创建一个JavaFX项目,它会自动为你创建这些文件,但我不确定你是否必须添加一个插件才能使它工作, 我不记得了。
FXML文件负责GUI,例如在场景中放置一个按钮,使用它的最简单方法是使用SceneBuilder,Oracle提供了该工具,也可以将其集成到IDE中。
如果你使用FXML,你可以将按钮指向你的FXML文档中的方法,这样你就不需要匿名的事件处理类。取而代之的是,让按钮调用控制器类中的一个特定方法。
以下是几个youtube教程,展示了将JavaFX与FXML结合使用的基础知识:https://www.youtube.com/watch?v=K7BOH-Ll8_ ghttps://www.youtube.com/watch?v=LMdjhuYSrqg
在JavaFX中,是否可以从一个类中处理多个事件类型(例如ActionEvent、MouseEvent等),而无需匿名事件处理程序?我尝试了以下操作,但这只是产生了一个编译时错误。
我正在构建一个Java应用程序。这个应用程序是一个典型的“油漆”应用程序,你可以选择一种颜色,并在画布上绘制。除了...我将有一个圆圈数组分布在画布的顶部。我希望这些圆立即改变颜色,如果,当用户正在绘制和鼠标得到圆的X(10)个像素(其中X是绘制的线的宽度除以2)。 这是我的密码。我有一张画布是一组的一部分。我还创建了一个圆圈节点,并将其作为组的一部分。我想我需要以某种方式创建一个鼠标事件,当用户
我计划创建一个单独的EventHandler类,它将为我的JavaFX类中的所有控件处理所有类型的事件。 例如,我添加了我的自定义事件处理程序类,以如下方式处理动作事件,它工作得很好: 以下是我的自定义事件处理程序类代码: 但是当我尝试将addEventHandler之一更改为MouseEvent并按以下方式修改主EventHandler类时,它会显示错误“Interface eventhandl
我在视图布局中使用了三个EditText小部件,用于三个不同的过滤器。如果我输入其中一条,另一条文本不应该是空白的吗? 下面是我的片段: GenericTextWatcher方法: 当我运行这个程序并输入EditText时,logcat看起来是这样的: 03-03 15:25:39.616 25952-25952/com.xyz.abcI/art:显式并发标记扫描GC释放23671(1194KB)
我正在尝试在javaFx中为特殊需要定制一个快捷方式系统。 这种特殊需求使得不可能使用KeyCombinaison(只限制一个键修饰符是不可接受的)。 我已经做了我适当的KeyCompin联络员系统,现在我想从节点调用一个处理程序(我在控制器之外)。但是我找不到任何优雅的解决方案来执行这个。 有一个按钮声明: 在我想从我的快捷方式代码调用控制器的操作之后。 和标准控制器。 我可以做一些工作,例如使
null 我想要达到的目标 我希望由一个实例发布的事件只由同一个实例处理 如果instance1发布eventX,那么只有instance1应该处理eventX null