

Java - Jak získat objekty v určené oblasti
Dobrý den,
StackPane root = new StackPane();
ArrayList<Object> list = new ArrayList();
list.addAll(root.getChildren().stream().filter((f) -> f.getLayoutX() >= 0 && f.getLayoutX() <= 100 && f.getLayoutY() >= 0 && f.getLayoutY() <= 100).collect(Collectors.toList()));
Pochopitelně jsem do root přidal prvky. Tenhle kód vrátí pole objektů, které mají LayoutX a LayoutY 0-100.
Chci se jenom zeptat, prosím Vás, zeptat, jestli je to správný způsob, jak tohle řešit?
Děkuji
S JavaFX som nerobil, ale tak vo všeobecnosti potrebuješ zistiť, či sa určená oblasť pretína s oblasťou daného prvku.
Zo zbežného googlenia, oblasť daného prvku získaš pomocou volania node.localToScene(node.getBoundsInLocal()) alebo node.localToScreen(node.getBoundsInLocal()). Či sa oblasti pretínajú zistíš volaním metódy bounds.intersects(otherBounds). Obidve oblasti musia byť samozrejme v rovnakom súradnicovom systéme.
Takže asi takto:
Netestované, s JavaFX som nerobil, ale skúsil by som to takto.
Funguje to. Jen jsem chtěl dodat, že nepoužívám StackPane, ale Pane.
Mockrát díky.
Ještě jsem zapomněl, že potřebuji odfiltrovat zmíněný StackPane.
Jenže, jak takový filtr, prosím Vás, napsat?
Napadá mě pouze jedno řešení. Převést objekt na string a zkontrolovat, jestli obsahuje StackPane.
Ale to je zbytečně složité.
Něco takového by nefungovalo?
Díky, to jsem potřeboval.
Ještě potřebuji jednu věc
Teď mě to vypíše to tlačítko, protože BoundingBox do něj zasahuje.
Potřeboval bych ale, aby za určitých okolností, bral objekty, které do plochy kompletně zasahují (ne pouze částečně).
BoundingBox má metodu contains, takže pokud ji nahradím místo intersects, tak by to mělo vrátit "[]".
Výsledek se však nezmění.
Co, prosím Vás, dělám špatně?
Používal jsem nevhodný objekt.
Tlačítko má totiž nulovou velikost (nevím proč).
intersects to sebral, protože do oblasti zasahuje.
contains to ale sebralo taky, protože má nulovou velikost, takže do oblasti zasahuje celé.
Takže to fungovalo správně, ale z logického hlediska to nedává smysl.
Když tlačítko změním třeba na Rectangle (kde musím zadat velikost), tak už to funguje správně.