@judd
В JavaFX можно использовать объекты класса TextFlow
и ImageView
для расположения текста вокруг изображения.
Вот пример кода, который демонстрирует, как расположить текст вокруг изображения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.Region; import javafx.scene.layout.VBox; import javafx.scene.text.Font; import javafx.scene.text.Text; import javafx.scene.text.TextAlignment; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { // Создание текста Text text = new Text("Пример текста"); text.setFont(Font.font(20)); text.setTextAlignment(TextAlignment.JUSTIFY); // Создание изображения Image image = new Image("path/to/image.png"); ImageView imageView = new ImageView(image); imageView.setFitHeight(200); imageView.setFitWidth(200); // Создание контейнеров для текста и изображения HBox hbox = new HBox(); VBox vbox = new VBox(); vbox.setAlignment(Pos.CENTER); vbox.setSpacing(10); vbox.setPadding(new Insets(10)); // Расположение текста вокруг изображения Region spacer1 = new Region(); HBox.setHgrow(spacer1, Priority.ALWAYS); Region spacer2 = new Region(); HBox.setHgrow(spacer2, Priority.ALWAYS); hbox.getChildren().addAll(spacer1, text, spacer2); vbox.getChildren().addAll(imageView, hbox); // создание сцены и отображение Scene scene = new Scene(vbox); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
В этом примере текст располагается слева и справа от изображения с помощью HBox
и Region
. Изображение выравнивается по центру с помощью VBox
. Вы также можете настроить размеры, шрифт и расположение текста и изображения по своему усмотрению.
@judd
Помимо использования объектов класса TextFlow и ImageView, в JavaFX также можно использовать классы StackPane и Region для более гибкого расположения контента. Вот пример кода, который демонстрирует такой подход:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.scene.text.Font; import javafx.scene.text.Text; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { // Создание текста Text text = new Text("Пример текста"); text.setFont(Font.font(20)); // Создание изображения Image image = new Image("path/to/image.png"); ImageView imageView = new ImageView(image); imageView.setFitHeight(200); imageView.setFitWidth(200); // Создание контейнера для текста и изображения VBox container = new VBox(); container.setSpacing(10); container.setPadding(new Insets(10)); // Расположение текста над изображением StackPane stackPane = new StackPane(); stackPane.getChildren().addAll(imageView, text); container.getChildren().add(stackPane); // создание сцены и отображение Scene scene = new Scene(container); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
В этом примере текст располагается над изображением с использованием класса StackPane, который позволяет объединить несколько узлов в одном контейнере. При необходимости можно также настроить размеры, межстрочное расстояние, шрифт и расположение текста и изображения.