【发布时间】:2017-04-25 22:04:04
【问题描述】:
JavaFX 2.2 - JDK 1.8.0_121
我在一个矩形内有一个 TextArea,它也恰好有一个鼠标监听器。问题是当我点击 TextArea 时,它会消耗事件并且矩形没有得到点击。
以下面的代码为例:
Group g = new Group();
Rectangle rect = new Rectangle(100,100);
TextArea textArea = new TextArea("Test");
textArea.setTranslateX(rect.getX());
textArea.setTranslateY(rect.getY());
textArea.setMinWidth(rect.getWidth());
textArea.setMinHeight(rect.getHeight());
//Calling a method to add an onMouseClickedProperty() mouse listener to the rectangle
addMouseListener(rect)
g.getChildren().addAll(rect, textArea);
在上述情况下,TextArea 占用的空间与矩形一样多,因此当我单击它时,TextArea 会消耗 onMouseClickedProperty() 事件。
有没有办法从 TextArea 中“禁用”或“删除”onMouseClickedProperty(),而是在发生双击时触发它?希望鼠标单击会被矩形消耗掉。
谢谢。
编辑:
我找到了一个可行的解决方案,它并不完美,但比 cmets 中讨论的要合适得多。
由于您无法阻止 TextArea 使用 MOUSED_PRESSED 事件,因此在 TextArea 区域执行之前处理事件的唯一方法是使用事件过滤器。
因此,使用上面的示例代码,我调用方法 addMouseListener(rect) 而不是仅使用鼠标侦听器,而是添加事件过滤器,而不是将其添加到矩形我将它添加到组中。
private void addMouseLisenter(Group group){
group.addEventFilter(MouseEvent.MOUSE_PRESSED,
new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
//Code here
}
});
}
这样,组和 TextArea 都可以点击鼠标。
注意:如果只希望组获得鼠标点击,可以添加 event.consume()。
我希望这可以帮助将来寻找类似东西的人。
【问题讨论】:
标签: java javafx event-handling textarea mouselistener