Мне нужно создать объекты Shape, в которых есть пустое пространство. Пример можно увидеть ниже: Кадрирование JavaFX 2 Объекты формы
В настоящее время пробел - это еще один белый прямоугольник, хотя я бы действительно хотел, чтобы он был пустым - см. За синим прямоугольником. Это возможно? Я не мог найти решений по реализации этого эффекта. Это мой код:
package StackPaneTest;
import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Shape;
import javafx.stage.Stage;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
public class StackedPaneController extends Application
implements Initializable {
@FXML // fx:id="panelBlock"
private StackPane panelBlock; // Value injected by FXMLLoader
@FXML
private Rectangle body;
@FXML
private Rectangle redBox;
public static void main(String[] args) {
launch(args);
}
@Override // This method is called by the FXMLLoader when initialization is complete
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
Shape newShape = Shape.subtract(body, redBox);
panelBlock.getChildren().add(0, newShape);
panelBlock.getChildren().remove(body);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("The test");
Group root = new Group();
try {
root.getChildren().add((Node) FXMLLoader.load(getClass().getResource("StackedPaneBlock.fxml")));
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
}
И файл FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?import javafx.scene.shape.*?>
<?import javafx.scene.text.*?>
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="StackPaneTest.StackedPaneController">
<children>
<StackPane fx:id="panelBlock" layoutX="136.0" layoutY="74.0" prefHeight="126.0" prefWidth="185.0">
<children>
<Rectangle fx:id="body" arcHeight="5.0" arcWidth="5.0" fill="DODGERBLUE" height="200.0" stroke="BLACK" strokeType="INSIDE" width="200.0" />
<Rectangle fx:id="redBox" arcHeight="5.0" arcWidth="5.0" fill="RED" height="48.99658203125" stroke="BLACK" strokeType="INSIDE" width="59.0" />
</children>
</StackPane>
</children>
</AnchorPane>
Выход мой код выглядит следующим образом:
Как вы можете видеть, что вычитали форма перемещается из исходное положение. Мне действительно нужно получить эту работу с FXML.
Может быть полигоном, где две стороны соединены (соединены/соединены)? –
Должно быть сделано прямо с Shape.subtract, но я не могу заставить его работать правильно. – Giannis
Это может быть ошибка в JFX, если она не работает. Если вы не можете с этим справиться, пожалуйста, покажите код, с которым вы работаете. –