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

对MouseEvent使用相同的事件处理程序

斜烈
2023-03-14

我是Java编程的新手,所以这个问题对这里的许多人来说可能听起来很愚蠢。我试图让自己熟悉JavaFX事件处理机制。

我正在开发一个GUI,我希望按钮在单击它时以及按下Enter键时执行相同的功能。

我能做以下事情吗?

public class ButtonHandler implements EventHandler<ActionEvent>
{
somefunction();
}

然后将它用于两个按键事件

button.setOnMouseClicked(new ButtonHandler);
button.setOnKeyPressed(new ButtonHandler);

共有1个答案

阚乐湛
2023-03-14

只要您不需要来自特定事件的任何信息(例如鼠标的坐标或按下的键),您就可以执行

EventHandler<Event> handler = event -> {
    // handler code here...
};

然后

button.addEventHandler(MouseEvent.MOUSE_CLICKED, handler);
button.addEventHandler(KeyEvent.KEY_PRESSED, handler);

当然,您也可以将实际工作委托给常规方法:

button.setOnMouseClicked(e -> {
    doHandle();
});
button.setOnKeyPressed(e -> {
    doHandle();
});

// ...

private void doHandle() {
    // handle event here...
}
 类似资料:
  • 我正在研究javaFX上事件处理程序的机制,但我不确定我是否理解了它,事实上我有一点怀疑:如果我有两个对象,它们有处理事件的所有必要代码(EventHandler接口ECC..),它们属于同一stackPane,问题是:有没有一种方法让第一个对象启动一个事件(例如ActionEvent),尽管它们属于同一Pane但将由两个对象处理?因为对于我所理解的“事件路线”来说,这是不可能的,至少是直接的。实

  • 现在,首次呈现发生在页面加载时。它只是在javascript文件中调用,如下所示: 这个很好用。 我现在需要的是重写相同的组件,但是使用不同的数据(实际上只是使用不同的数据顺序)。 我在codepen上发布了我的原始代码,以便于调查:https://codepen.io/andriusl/pen/yxwxzg

  • 事件就是用户或浏览器自身执行的某种动作。诸如click、load 和mouseover,都是事件的名字。而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以"on"开头,因此click 事件的事件处理程序就是onclick,load 事件的事件处理程序就是onload。为事件指定处理程序的方式有好几种。 13.2.1 HTML事件处理程序某个元素支持的每种事件,都可以使用一

  • 我已经在JList上有一个这样的自定义控件库 但是我希望Jlist有滚动条,所以我将自定义控件的超类更改为JScrollPane并将JList添加到其中。像这样的代码 好吧,如果MyClass扩展了JList,在JFrame中我可以将MouseListener添加到MyClass对象中,在mouseClick中我比较MouseEvent getSource是MyClass的一个实例并调用MyCla

  • 我有一节范例课。它有一个附加了事件处理程序的ObservableCollection。 我正在执行以下代码: 如果从AnotherReference访问集合,为什么不执行事件处理程序?

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