una showoptiondialog que objetos metodo lista imprimir codigo java javafx

java - showoptiondialog - Cómo verificar si el nodo rectangular está en la ventana



metodo list java (1)

Hasta ahora he codificado una aplicación JavaFX en la que algunos rectángulos se mueven. Ahora quiero crear un método para verificar si un rectángulo todavía está visible en la ventana o si ya se movió fuera de él. Mi código se ve así:

import javafx.animation.AnimationTimer; import javafx.application.Application; import javafx.geometry.Point2D; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; public class Test extends Application { private Pane root = new Pane(); private Rectangle rect = new Rectangle(150,150,15,15); private Point2D velocity = new Point2D(2,1); private Pane createContent(){ root.setPrefSize(500,500); root.getChildren().add(rect); AnimationTimer timer = new AnimationTimer() { @Override public void handle(long now) { update(); } }; timer.start(); return root; } private void update(){ if (outOfWindow(rect)) { System.out.println("out of window.../n"); }else { System.out.println("in window.../n"); } rect.setTranslateX(rect.getTranslateX() + velocity.getX()); rect.setTranslateY(rect.getTranslateY() + velocity.getY()); } private boolean outOfWindow(Node node) { if (node.getBoundsInParent().intersects(node.getBoundsInParent().getWidth(), node.getBoundsInParent().getHeight(), root.getPrefWidth() - node.getBoundsInParent().getWidth() * 2, root.getPrefHeight() - node.getBoundsInParent().getHeight() * 2)){ return false; } return true; } @Override public void start(Stage primaryStage) throws Exception { primaryStage.setScene(new Scene(createContent())); primaryStage.show(); } public static void main(String[] args) { launch(args); } }

El método outOfWindow() es mi intento de verificar si la posición del rectángulo todavía está en la ventana. Funciona. Pero, ¿hay una forma mejor o una forma de detectar qué borde de ventana cruzó el rectángulo?


Si un rectángulo está fuera del otro, significa dos cosas:

  • ellos no se cruzan
  • el más grande no contiene completamente el más pequeño

Entonces su método puede verse de la siguiente manera:

private boolean inTheWindow(Rectangle rect) { return rect.getBoundsInParent().intersects(root.getLayoutBounds()) || root.getLayoutBounds().contains(rect.getBoundsInParent()); }

Aquí está MCVE para demostrar:

public class FXBounds extends Application { private Pane root; @Override public void start(Stage primaryStage) { root = new Pane(); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("Hello World!"); primaryStage.setScene(scene); primaryStage.show(); check(1,1,50,50, true); check(100,100,50,50, true); check(-5,-5,30,30, true); check(-50,0,30,30, false); } private void check(int x, int y, int width, int height, boolean in) { Rectangle rect = new Rectangle(x, y, width, height); root.getChildren().add(rect); System.out.println(in == inTheWindow(rect)); } private boolean inTheWindow(Rectangle rect) { return rect.getBoundsInParent().intersects(root.getLayoutBounds()) || root.getLayoutBounds().contains(rect.getBoundsInParent()); } }