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

带有工具提示和超链接的JavaFX“快速修复”

戴建义
2023-03-14

JavaFX是否提供类似Eclipse Quickfix的东西?这意味着您将鼠标悬停在损坏的东西上,并为其找到了一些可以立即应用的解决方案。我知道有工具提示,但它们只能包含文本,我需要一些可点击的东西。另一种解决方案是类似对话框的东西,但我不想打开另一个窗口。我希望它出现在当前阶段。有什么建议吗?

编辑:为了说明这一点,我想在基于JavaFX的应用程序上采用eclipse快速修复的概念,当鼠标悬停在圆形实例上时,可能会显示“快速修复”。我不想检查任何(java/javafx)源代码。

编辑2:我现在在工具提示上有一个超链接:

HBox box = new HBox();
Tooltip tooltip = new Tooltip();
tooltip.setText("Select an option:");
tooltip.setGraphic(new Hyperlink("Option 1"));
Tooltip.install(box, tooltip);

我现在有三个新问题:

  1. 在鼠标进入工具提示时,如何使工具提示在离开HBox并停留在那里时不消失?
  2. 如何添加多个图形/超链接?甚至可能吗?
  3. 如何首先显示文本,然后在新行中显示图形?

提前谢谢!

共有1个答案

子车勇锐
2023-03-14

可以使用setGraphic()方法将任何节点添加到工具提示中。下面是一个简单的示例,演示如何使用工具提示实现“快速修复”功能:

import java.util.Random;

import javafx.application.Application;
import javafx.css.PseudoClass;
import javafx.scene.Scene;
import javafx.scene.control.Hyperlink;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TooltipWithQuickfix extends Application {

    @Override
    public void start(Stage primaryStage) {

        TextField textField = new TextField();
        textField.pseudoClassStateChanged(PseudoClass.getPseudoClass("invalid"), true);

        textField.setTextFormatter(new TextFormatter<Integer>(c -> {
            if (c.getText().matches("\\d*")) {
                return c ;
            }
            return null ;
        }));

        textField.textProperty().isEmpty().addListener((obs, wasEmpty, isNowEmpty) ->
            textField.pseudoClassStateChanged(PseudoClass.getPseudoClass("invalid"), isNowEmpty));

        Tooltip quickFix = new Tooltip();
        Hyperlink setToDefault = new Hyperlink("Set to default");
        Hyperlink setToRandom = new Hyperlink("Set to random");
        setToDefault.setOnAction(e -> {
            textField.setText("42");
            quickFix.hide();
        });
        Random rng = new Random();
        setToRandom.setOnAction(e -> {
            textField.setText(Integer.toString(rng.nextInt(100)));
            quickFix.hide();
        });

        VBox quickFixContent = new VBox(new Label("Field cannot be empty"), setToDefault, setToRandom);
        quickFixContent.setOnMouseExited(e -> quickFix.hide());
        quickFix.setGraphic(quickFixContent);

        textField.setOnMouseEntered(e -> {
            if (textField.getText().isEmpty()) {
                quickFix.show(textField, e.getScreenX(), e.getScreenY());
            }
        });



        VBox root = new VBox(textField);

        root.getStylesheets().add("style.css");

        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

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

使用样式表(style.css):

.root {
    -fx-alignment: center ;
    -fx-padding: 24 10 ;
}

.text-field:invalid {
    -fx-control-inner-background: #ff7979 ;
    -fx-focus-color: red ;
}
 类似资料:
  • 我正在尝试将工具提示放在我的WPF应用程序中禁用的超链接上。超链接嵌入了用于文本参数绑定的TextBlock元素。但是,由于某种原因,工具提示不适用于具有嵌入式TextBlock元素的禁用超链接。以下是一个示例: 这个XAML描述了三个超链接。 第一个超链接已禁用,但没有嵌入TextBlock元素。工具提示显示得很好 第二个超链接具有嵌入的TextBlock元素,但已启用。同样,工具提示显示良好

  • 主要内容:创建超链接,示例类表示类似于JavaFX的网页上的锚链接的超链接。 上面的代码生成以下结果。 创建超链接 以下代码使用默认构造函数创建超链接对象。然后它设置一个作为文本标题,最后添加点击事件处理程序。 实例方法定义超链接的文本标题。超链接类扩展了类,可以为超链接设置字体和填充。 以下代码将图像添加到超链接控件。 示例 更改超链接的字体,如下代码所示 - 上面的代码生成以下结果。

  • 问题内容: 我目前在我的应用程序中添加了一些引导工具提示。 所有的“正常”工具提示都可以,但是当我要使用时,我得到的只是一个空的工具提示。 我的工具提示: 在DOM中,我有: div的内容似乎为空,因此工具提示中没有任何内容可显示。我试图将一些HTML文本直接放在DOM中,例如: 而且有效。 你有好主意吗? 问题答案: html-unsafe指令旨在指出其内容。那这个呢: 然后,在SomeCtrl

  • 我在使用JavaFX时遇到了以下问题。 在Java Scene Builder中使用样式表works重新定义工具提示样式。 在eclipse中重新定义执行时的工具提示样式,在由scene builder生成的FXML文件中包含相同的样式表 不起作用(任何其他属性重定义都起作用)。 使用代码指令在eclipse中使用相同样式表重新定义执行时的工具提示样式: 编辑:换句话说,我想成为一个在FXML文件

  • 当你将鼠标悬停在网页的某个区域时,有很多基于JavaScript的库会显示工具提示。有些相当简单,有些允许工具提示显示用CSS样式设计的超文本标记语言内容。 但是有没有一种方法可以在不使用JavaScript的情况下显示样式化的工具提示?如果您只是使用属性,标记不会被处理(例如

  • 问题内容: 当您将鼠标悬停在网页的特定区域时,有很多基于JavaScript的库会显示工具提示。有些相当简单,有些允许工具提示显示使用CSS样式的HTML内容。 但是有没有一种方法可以显示样式化的工具提示而不使用JavaScript?如果仅使用该属性,则不会处理标签(例如,不会产生换行符)。我正在寻找一种解决方案,该解决方案无需使用任何JavaScript即可显示样式化的HTML内容。 问题答案: