gpt4 book ai didi

java - 在工具提示代码中无限触发两个鼠标事件的奇怪行为

转载 作者:搜寻专家 更新时间:2023-10-31 19:41:03 25 4
gpt4 key购买 nike

我正在尝试使用 javafx.stage.Popup 实现自定义工具提示。示例演示代码是:

public class PopupDemo extends Application {

private Popup tooltip;
private final SepiaTone sepiaTone = new SepiaTone();

public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("PopupDemo");

Label content = new Label();
content.setStyle("-fx-background-color:#FCFBBD; -fx-padding: 5; -fx-border-color: #BFBD3B");

tooltip = new Popup();
tooltip.getContent().add(content);

VBox vbox = new VBox(10);
for (int i = 0; i < 5; i++) {
final Label lbl = new Label("item " + i);
lbl.setStyle("-fx-border-color:darkgray; -fx-background-color:lightgray");
lbl.setMaxSize(80, 60);
lbl.setMinSize(80, 60);
lbl.setAlignment(Pos.CENTER);

lbl.setOnMouseEntered(new EventHandler<MouseEvent>() {

@Override
public void handle(final MouseEvent e) {
lbl.setEffect(sepiaTone);
lbl.setStyle("-fx-cursor: hand");
Label content = (Label) tooltip.getContent().get(0);
content.setText(lbl.getText());
tooltip.show(lbl, e.getScreenX(), e.getScreenY());
}
});
lbl.setOnMouseExited(new EventHandler<MouseEvent>() {

@Override
public void handle(MouseEvent e) {
lbl.setEffect(null);
lbl.setStyle("-fx-cursor: default");
tooltip.hide();
}
});

vbox.getChildren().add(lbl);
}

StackPane root = new StackPane();
root.setPadding(new Insets(20));
root.getChildren().add(vbox);
primaryStage.setScene(new Scene(root, 600, 400));
primaryStage.show();
}
}

当我将鼠标移到标签上时,会出现弹出窗口并且效果很好。但在某些情况下,两个鼠标事件处理程序 OnMouseEnteredOnMouseExited 会连续不断地被调用。可以通过运行提供的示例、最大化窗口和连续悬停标签来重现这一点。

有没有办法避免这种情况?我正在使用 JavaFX 2.0.1。谢谢。

最佳答案

这是一个经典问题:您将鼠标放在一个点上,节点收到 MouseEntered — 工具提示出现在鼠标下方并覆盖触发 MouseExited 的节点。

为避免这种情况,您可以将 tooltip.show(lbl, e.getScreenX(), e.getScreenY()) 调用更改为

tooltip.show(lbl, e.getScreenX() + 1, e.getScreenY() + 1);

关于java - 在工具提示代码中无限触发两个鼠标事件的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9178329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com