import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.BorderPane;
import javafx.stage.Screen;
import javafx.stage.Stage;

public class RenderScaleTest extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        for (Screen screen: Screen.getScreens()) {
            open(screen);
        }
    }

    private void open(Screen screen) {
        Rectangle2D r = screen.getVisualBounds();
        System.out.println(r); // FIX

        MenuItem item = new MenuItem("Open");
        Menu menu = new Menu("File", null, item);
        MenuBar menuBar = new MenuBar(menu);
        Label label = new Label("Hello World");
        BorderPane root = new BorderPane(label);
        root.setTop(menuBar);

        Scene scene = new Scene(root, 400, 300);

        Stage stage = new Stage();
        stage.setTitle("Menu Scale");
        stage.setScene(scene);
        double x = r.getMinX() + (r.getMaxX() - r.getMinX() - scene.getWidth()) / 2;
        double y = r.getMinY() + (r.getMaxY() - r.getMinY() - scene.getHeight()) / 2;
        stage.setX(x);
        stage.setY(y);
        stage.titleProperty().bind(Bindings.format("X: %.1f, Y: %.1f", stage.xProperty(), stage.yProperty()));
        label.textProperty().bind(Bindings.format("Scale %.1f", stage.renderScaleXProperty().multiply(100)));

        stage.show();
    }
}
