。我一直在寻找这个问题,但我还没有在这里找到它,所以我想这真的很简单。如何仅使用一个事件处理类为JavaFX中的同一个节点处理多个事件?每个人都有
我用一个按钮在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!!!");
}
}
}
我不知道这是非常低效的或坏的编程风格,但是是唯一的我到目前为止已经提出了解决方案。所以我想问问你这是一个很好的解决方案,还是如果有更好的解决方案,就把我的光芒放在眼里!事先感谢。
有什么不对您的实现。你可以使用一个switch语句,否则,如果哪一个更有效。这个问题可能是主题。 – Sedrick