我目前有一个应用程序,它将在用户单击的任何地方创建一个文本区域。但是,我希望该 Pane 仅在特定条件成立时才可编辑。不过,可点击区域永远不会消失。如何更改此设置,以便仅当 myAnchorPane.isVisible() 为 true 时该区域才可单击?
double oldHeight = 0;
double oldWidth = 0;
@FXML
private void handleTextButton() {
System.out.println("Text Clicked");
TextHeaderTools.setVisible(false);
BackgroundTools.setVisible(false);
VideoTools.setVisible(false);
PageTitleTools.setVisible(false);
TemplateTools.setVisible(false);
ImageTools.setVisible(false);
TextTools.setVisible(true);
workspace.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent me) {
int x = (int) me.getX();
int y = (int) me.getY();
System.out.println("(" + x +", " + y +")");
InlineCssTextArea newArea = new InlineCssTextArea();
newArea.relocate(x, y);
newArea.setStyle("-fx-background-color: transparent;");
Text textHolder = new Text();
newArea.setPrefSize(40,40);
textHolder.textProperty().bind(newArea.textProperty());
textHolder.layoutBoundsProperty().addListener(new ChangeListener<Bounds>() {
@Override
public void changed(ObservableValue<? extends Bounds> observable, Bounds oldValue, Bounds newValue) {
if (oldHeight != newValue.getHeight()) {
oldHeight = newValue.getHeight();
newArea.setPrefHeight(textHolder.getLayoutBounds().getHeight() + 30);
}
if (oldWidth != newValue.getWidth()){
oldWidth = newValue.getWidth();
newArea.setPrefWidth(textHolder.getLayoutBounds().getWidth() + 30);
}
}
});
workspace.getChildren().addAll(newArea);
} //end handle
});
}
编辑:
条件是
myAnchorPane.isVisible()
最佳答案
您可以使用 ReactFX 很好地实现这一点.
不要使用 workspace.addEventHandler(MOUSE_CLICKED, ...)
,而是执行以下操作:
EventStreams.eventsOf(workspace, MOUSE_CLICKED)
.suppressWhen(myAnchorPane.visibleProperty().not())
.subscribe((MouseEvent me) -> {
// handle mouse click
});
我看到您使用 RichTextFX,因此您已经将 ReactFX 作为依赖项了。
关于java - 删除事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26849829/