JavaFX:如何设置相对于鼠标光标的工具提示位置?

时间:2014-07-07 22:46:28

标签: javafx

我有一些按钮,我已经为它们添加了工具提示。

Button button = new Button("Example");
Tooltip tt = new Tooltip("example");
button.setTooltip(tt);

默认情况下,当我将鼠标悬停在按钮上时,弹出工具提示;但是,工具提示出现在光标下方。我正在寻找一种方法来改变工具提示的默认位置,当moused到10px正确和向下。如下所示:

tooltip.setLocation(mouseLocation+10, mouseLocation-10);

我看了JavaFX: how to set correct tooltip position? 它并不是我真正想要的,因为它更多的是关于屏幕显示工具提示。

3 个答案:

答案 0 :(得分:1)

虽然这个问题有点陈旧,但仍然没有答案。

  1. 第1部分
  2.   

    在屏幕中使用Button当前位置的内容怎么样?   并相应地设置工具提示位置?

    Button button = new Button();
    button.setTooltip(new Tooltip("Hey i am a Button"));
    button.getTooltip().setOnShowing(s->{
    
        //Get button current bounds on computer screen
        Bounds bounds = button.localToScreen(button.getBoundsInLocal());
        button.getTooltip().setX(bounds.getMaxX());
        button.getTooltip().setY(bounds.getMinY());
    
    });
    
    1. 第2部分
    2.   

      (您也可以使用鼠标,但在某处添加了mouseMoveListener   它在Button上添加的示例,但我更愿意添加它   如果我们谈论了很多Stage

      ,请Scene Button
          double currentMouseX;
          double currentMouseY;
          button.setOnMouseMoved(m->{
              currentMouseX=m.getScreenX();
              currentMouseY=m.getScreenY();
          });
      
          button.getTooltip().setOnShowing(s->{       
              button.getTooltip().setX(currentMouseX+button.getTooltip().getWidth()+5);
              button.getTooltip().setY(currentMouseY);                
          });
      
        

      Finnaly:

      实际上,在IDE中,您使用的是button.getTooltip().setOn..类型,您将看到可用于在显示或隐藏之前和之后控制工具提示的所有可用方法。

答案 1 :(得分:0)

要相对于鼠标的位置,可以使用机器人

示例:

enter image description here

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;



public class Main extends Application{

    @Override
    public void start(Stage stage) throws Exception {
        com.sun.glass.ui.Robot robot =
        com.sun.glass.ui.Application.GetApplication().createRobot();
        Pane pane = new Pane();
        Button btn = new Button("Stack");
        Tooltip tt = new Tooltip("example");
        tt.setX(robot.getMouseX()+10);
        tt.setY(robot.getMouseY()-10);
        btn.setTooltip(tt);
        pane.getChildren().add(btn);
        Scene scene = new Scene(pane);
        stage.setScene(scene);
        stage.show();
    }
    public static void main(String[] args){
        launch(args);
    }
}

答案 2 :(得分:0)

JavaFx 8工具提示在工具提示显示之前和之后(以及之前和之后)提供事件回调。因此,在"之前安装一个事件处理程序。如下所示。不幸的是,窗口事件并没有为您提供当前鼠标坐标,但您仍然可以随时使用java.awt.MouseInfo.getPointerInfo()。getLocation()获取它们,如下所示。

Tooltip t = new Tooltip();
Tooltip.install(yournode, t);
t.setOnShowing(ev -> {// called just prior to being shown
                Point mouse = java.awt.MouseInfo.getPointerInfo().getLocation();
                Point2D local = yournode.screenToLocal(mouse.x, mouse.y);

                // my app-specific code to get the char's yaxis value
                // then set the text as I want
                double pitch = yaxis.getValueForDisplay(local.getY()).doubleValue();
                double freq = AudioUtil.pitch2frequency(pitch);
                t.setText(String.format("Pitch %.1f:  %.1f Hz   %.1f samples", pitch, freq, audio.rate / freq));
        });

这对我有用。