В течение прошлой недели или 2 я экспериментировал с различными способами манипулирования фигурами и текстовыми объектами в сцене с использованием JavaFX.Изменение размера отдельных объектов текста
В настоящее время я ищу создание новых текстовых объектов и возможность управлять их размером.
Итак, у меня есть сцена с кнопкой, которая просто говорит «Текст», что после нажатия создает TextField, посредством чего при вводе текста в это поле создается новый текстовый объект. Существует также слайдер, который вы можете использовать для изменения размера текстового объекта. и вы сможете перетащить различные текстовые объекты о
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Slider;
import javafx.scene.control.TextField;
import javafx.scene.layout.Pane;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
public class CreatingNewText extends Application
{
private int size;
private TextField enterText;
private Slider sizeSlider;
private Button button;
public static void main(String [] args)
{
launch(args);
}
public void start(Stage primaryStage)
{
Pane root = new Pane();
// Button for creating new text Object
button = new Button("text");
button.setLayoutX(200);
// Slider for Size
sizeSlider = new Slider(0,255,0);
sizeSlider.setLayoutX(250);
sizeSlider.setLayoutY(0);
// Button functionality
button.setOnAction(e ->{
Text text = new Text(150,300,"Text");
// Moving created text
text.setOnMouseDragged(f ->{
text.setX(f.getX());
text.setY(f.getY());
});
text.setLayoutX(300);
text.setLayoutY(300);
text.setFont(Font.font("Phosphate"));
// Text entry field
enterText = new TextField();
text.textProperty().bind(enterText.textProperty());
// Slider functionality
text.setOnMouseEntered(g ->{
});
sizeSlider.valueProperty().addListener((ObservableValue
<? extends Number> ov, Number curVal, Number newVal) -> {
size = (int) sizeSlider.getValue();
Font fontSize = Font.font(size);
text.setFont(fontSize);
});
root.getChildren().addAll(enterText,text);
});
root.getChildren().addAll(button,sizeSlider);
Scene scene = new Scene(root,600,600);
primaryStage.setScene(scene);
primaryStage.show();
}
}
Проблемы -
Я не могу изменить размер конкретного текстового объекта - Я понимаю, что каждый раз, когда я создаю новый текст объект присваивает его переменной «текст», и поэтому при изменении размера с помощью ползунка все текстовые формы, связанные с «текстом», также изменятся, как это можно исправить?
Я также уверен, что одно и то же происходит для текстового поля - каждый раз, когда кнопка текста нажата, он просто создает новое текстовое поле, которое просто сидит поверх старого. Я попытался создать свое текстовое поле вне события действия - похоже на слайдер, но не может, потому что текстовый объект является локальным для события действия. Создание «текста» переменной экземпляра просто усложняет ситуацию, и я получаю ошибку «исключение в запуске приложения» - так что в основном это не работает. Действительно, я хочу только одно текстовое поле, которое может создавать несколько текстовых объектов.
Извиняется за код. Я очень неопытен, и это даже выглядит беспорядочным для меня. Надеюсь, что вопрос тоже имеет смысл.
По вопросу 2: Почему вы создаете в другом текстовом поле. Какова цель? – user43968
Это не намеренная вещь. Мне нужно только одно текстовое поле, но если я придерживаюсь того же подхода, что и для создания слайдера, это не работает, потому что текст локален для события действия. – Treeno1
Нет проблем с помещением текстового поля, как ползунок, и кнопка просто перемещает строку 'enterText = new TextField();' ниже 'sizeSlider.setLayoutY (0);' и проверяет ваш addAll 'root.getChildren(). AddAll (текст); 'root.getChildren(). addAll (button, sizeSlider, entertext);' – user43968