¿Cómo obtener la ubicación X e Y de un nodo de JavaFX para mostrar un PopupControl?

Jeremías Binegar:

He creado una clase JavaFX que es similar a la clase DatePicker sino que muestra una ventana emergente con una manera de elegir una hora. Estoy deseando tener la ventana emergente aparece debajo del campo de texto y el botón tal como lo hace el DatePicker emergente, pero no soy capaz de encontrar una manera de obtener las coordenadas X e Y de los nodos. Cualquier ayuda sería apreciada.

jewelsea:

Usted puede obtener la pantalla coordina usando: node.localToScreen(x,y).

El siguiente código localizará (ancla) la esquina superior izquierda de una ventana emergente en la parte inferior central de un nodo en la ventana propietaria emergente:

Point2D anchorPoint = node.localToScreen(
        node.getWidth() / 2,
        node.getHeight()
);

popup.setAnchorLocation(
        PopupWindow.AnchorLocation.WINDOW_TOP_LEFT
);

popup.show(
        node,
        anchorPoint.getX(),
        anchorPoint.getY()
);

Ejemplo de aplicación:

Muestra y esconde una ventana emergente situado en la parte inferior central del botón de control.

La tercera ley

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.geometry.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.StackPane;
import javafx.stage.*;

public class Popcorn extends Application {
    @Override
    public void start(Stage stage) {
        StackPane popupLayout = new StackPane(
                new Label(
                        "Clarke's third law\nAny sufficiently advanced technology is indistinguishable from magic."
                )
        );
        popupLayout.setStyle("-fx-opacity: 0.8; -fx-background-color: paleturquoise;");
        popupLayout.setPadding(new Insets(10));

        Popup popup = new Popup();
        popup.getContent().add(
                popupLayout
        );
        popupLayout.setOnMouseClicked(event -> popup.hide());

        ToggleButton showPopupButton = new ToggleButton("Show popup");

        showPopupButton.textProperty().bind(
                Bindings.when(showPopupButton.selectedProperty())
                        .then("Hide popup")
                        .otherwise("Show popup")
        );

        showPopupButton.selectedProperty().addListener((observable, wasSelected, isSelected) -> {
            if (isSelected) {
                showPopup(popup, showPopupButton);
            } else {
                popup.hide();
            }
        });

        popup.setOnShown(event -> showPopupButton.setSelected(true));
        popup.setOnHidden(event -> showPopupButton.setSelected(false));

        StackPane stageLayout = new StackPane(showPopupButton);
        stageLayout.setPadding(new Insets(10));
        stage.setScene(new Scene(stageLayout));
        stage.show();
    }

    private void showPopup(Popup popup, Control ownerNode) {
        Point2D anchorPoint = ownerNode.localToScreen(
                ownerNode.getWidth() / 2,
                ownerNode.getHeight()
        );

        popup.setAnchorLocation(
                PopupWindow.AnchorLocation.WINDOW_TOP_LEFT
        );

        popup.show(
                ownerNode,
                anchorPoint.getX(),
                anchorPoint.getY()
        );
    }

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

Una nota sobre los anclajes emergentes

El punto de anclaje emergente es sólo consejos al sistema emergente en dónde colocar la ventana emergente. La lógica emergente integrado en JavaFX es lo suficientemente inteligente como para saber el tamaño de la ventana emergente y su ubicación inicial en la pantalla. Si eso significa que no hay suficiente de bienes raíces a la izquierda en la pantalla para mostrar la ventana emergente en el punto de anclaje sugerido, la puesta en práctica emergente ajustará automáticamente el punto de anclaje para asegurar que el emergente será totalmente visible cuando se muestra por primera vez. Puede probar esto ejecutando el código de ejemplo y colocando la etapa de propietario en el extremo inferior o derecho de la pantalla antes de tratar de mostrar la ventana emergente.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=362979&siteId=1
Recomendado
Clasificación