JavaFX 控件绑定自定义Tooltip

迈不过友情╰ 2023-10-15 09:44 279阅读 0赞

控件绑定自定义Tooltip,自己设置显示位置和显示延时。示例如下:

  1. package ch06;
  2. import javafx.application.Application;
  3. import javafx.geometry.Bounds;
  4. import javafx.geometry.Insets;
  5. import javafx.geometry.Point2D;
  6. import javafx.geometry.Pos;
  7. import javafx.scene.Node;
  8. import javafx.scene.Scene;
  9. import javafx.scene.control.Label;
  10. import javafx.scene.control.Tooltip;
  11. import javafx.scene.layout.HBox;
  12. import javafx.stage.Stage;
  13. import javafx.util.Duration;
  14. /**
  15. * @copyright 2023-2022
  16. * @package ch06
  17. * @file TooltipAnchoringDemo.java
  18. * @date 2023-08-24 13:32
  19. * @author qiao wei
  20. * @version 1.0
  21. * @brief
  22. * @history
  23. */
  24. public class TooltipAnchoringDemo extends Application {
  25. public static void main(String[] args) {
  26. Application.launch(TooltipAnchoringDemo.class, args);
  27. }
  28. @Override
  29. public void start(Stage stage) {
  30. // 要显示tooltip的控件。
  31. Label label1 = new Label("TEST1\nTEST1\nTEST1");
  32. label1.setStyle("-fx-background-color: red;");
  33. Label label2 = new Label("TEST2\nTEST2\nTEST2");
  34. label2.setStyle("-fx-background-color: green;");
  35. Label label3 = new Label("TEST3\nTEST3\nTEST3");
  36. label3.setStyle("-fx-background-color: blue;");
  37. // 将控件与显示的tooltip绑定。
  38. CustomTooltip tooltip = CustomTooltip.install("TOOLTIP 1", label1);
  39. tooltip.setShowDelay(Duration.seconds(0.1));
  40. CustomTooltip.install("TOOLTIP 2", label2);
  41. CustomTooltip.install("TOOLTIP 3", label3);
  42. // Set 15px is the amount of horizontal space between each child controls.
  43. HBox root = new HBox(15, label1, label2, label3);
  44. // 设置容器内控件距离容器边框距离。
  45. root.setPadding(new Insets(10));
  46. root.setAlignment(Pos.BOTTOM_RIGHT);
  47. Scene scene = new Scene(root, 300, 180);
  48. stage.setScene(scene);
  49. stage.setTitle("Tooltip Demo");
  50. stage.show();
  51. }
  52. }
  53. class CustomTooltip extends Tooltip {
  54. public CustomTooltip(final String s) {
  55. super(s);
  56. }
  57. /**
  58. * @class CustomTooltip
  59. * @date 2023-08-24 14:09
  60. * @author qiao wei
  61. * @version 1.0
  62. * @brief Binds control and tooltip.
  63. * @param message tooltip's message.
  64. * @param node control.
  65. * @return
  66. * @throws
  67. */
  68. public static CustomTooltip install(String message, Node node) {
  69. CustomTooltip tooltip = new CustomTooltip(message);
  70. tooltip.node = node;
  71. install(node, tooltip);
  72. return tooltip;
  73. }
  74. @Override
  75. protected void show() {
  76. // Set the new position before showing.
  77. Point2D anchor = anchor(node);
  78. setAnchorX(anchor.getX());
  79. setAnchorY(anchor.getY());
  80. super.show();
  81. }
  82. /**
  83. * @class CustomTooltip
  84. * @date 2023-08-24 13:42
  85. * @author qiao wei
  86. * @version 1.0
  87. * @brief Calculates the anchor point for the tooltip.
  88. * @param node The node
  89. * @return The anchor position.
  90. * @throws
  91. */
  92. private Point2D anchor(final Node node) {
  93. // Get the node bounds on the screen.
  94. final Bounds bounds = node.localToScreen(node.getBoundsInLocal());
  95. // Calculate the opening position based on node bounds for screen bounds.
  96. final Point2D openPosition = new Point2D(bounds.getMaxX(), bounds.getMaxY() + Y_OFFSET);
  97. return openPosition;
  98. }
  99. /**
  100. * Pixel offset from the node in the y-axis to display the tooltip.
  101. * You can keep it to 0. Normally I don't want to keep it very near to the node.
  102. */
  103. private static final int Y_OFFSET = 2;
  104. private Node node;
  105. }

发表评论

表情:
评论列表 (有 0 条评论,279人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Maven插定义

    除了内置绑定以外,用户还能够自己选择将某个插件目标绑定到生命周期的某个阶段上,这种自定义绑定方式能让Maven项目在构建过程中执行更多更富特色的任务。 一个常见的例子是创建项