ScrollPane上未显示工具提示

时间:2014-07-23 22:01:57

标签: javafx tooltip scrollpane

按照教程here,我尝试使用以下代码在ScrollPane上创建工具提示:

final ScrollPane scroll = new ScrollPane();

scroll.addEventHandler(MouseEvent.MOUSE_MOVED, new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent t) {
            pointer = MouseInfo.getPointerInfo();
            point = pointer.getLocation();
            color = robot.getPixelColor((int) point.getX(), (int) point.getY());
            Tooltip tooltip = new Tooltip();
            tooltip.setText(" " + color);
            tooltip.activatedProperty();
            scroll.setTooltip(tooltip);

            System.out.println("Color at: " + point.getX() + "," + point.getY() + " is: " + color);
        }

    });

然而,工具提示拒绝在ScrollPane上显示,但是&#34; Color的输出:...&#34;正在打印,所以我确信正在调用句柄。

编辑:根据jewelsea的建议,我尝试将eventHandler放在内容上,而不是放在窗格上,但没有效果。

1 个答案:

答案 0 :(得分:2)

如果我理解你要做的事情,你真的只需要安装一次工具提示,然后在鼠标移动时修改它的文本。

这对我有用:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.Tooltip;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelReader;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class ImageTooltipTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        BorderPane root = new BorderPane();
        Image image = new Image("http://www.publicdomainpictures.net/pictures/30000/velka/tropical-paradise.jpg");
        final ImageView imageView = new ImageView();
        imageView.setImage(image);
        final ScrollPane scroller = new ScrollPane();
        scroller.setContent(imageView);

        final Tooltip tooltip = new Tooltip();
        scroller.setTooltip(tooltip);

        scroller.getContent().addEventHandler(MouseEvent.MOUSE_MOVED, event -> {
            Image snapshot = scroller.getContent().snapshot(null, null);
            int x = (int) event.getX();
            int y = (int) event.getY();
            PixelReader pixelReader = snapshot.getPixelReader();
            Color color = pixelReader.getColor(x, y);
            String text = String.format("Red: %.2f%nGreen: %.2f%nBlue: %.2f", 
                    color.getRed(),
                    color.getGreen(),
                    color.getBlue());
            tooltip.setText(text);
        });



        root.setCenter(scroller);
        Scene scene = new Scene(root, 800, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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