gpt4 book ai didi

javafx-2 - 在 JavaFX 文本节点周围绘制边框

转载 作者:行者123 更新时间:2023-12-02 22:04:41 24 4
gpt4 key购买 nike

我想在 JavaFX 场景图中的任意 javafx.scene.text.Text 节点(例如 Button 对象中的节点)周围绘制红色边框。

检索所有文本节点很容易,但找不到它们在场景中的位置,它们有一个 x 和 y 属性,似乎没有正确设置,但它们没有宽度和高度。

到目前为止,我已尝试将带有红色描边的矩形添加到堆栈 Pane 中,但 x 和 y 总是错误的,而且我无法获取大小。

最佳答案

一种解决方案是将文本节点包装在布局 Pane (例如 HBox)中,并在布局 Pane 上使用 CSS:

import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class TextBorderExample extends Application {

@Override
public void start(Stage primaryStage) {
final HBox root = new HBox(5);

root.getChildren().addAll(
new Text("This"), new Text("Is"), new Text("A"), createBorderedText("Red"), new Text("Bordered"), new Text("Text")
);

primaryStage.setScene(new Scene(root));
primaryStage.show();
}
private Node createBorderedText(String text) {
final HBox hbox = new HBox();
hbox.getChildren().add(new Text(text));
hbox.setStyle("-fx-border-color: red;");
return hbox ;
}

public static void main(String[] args) {
launch(args);
}
}

另一种方法是使用矩形,如下所示:

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Bounds;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class TextBorderExample extends Application {

@Override
public void start(Stage primaryStage) {
final HBox root = new HBox(5);
final Text red = new Text("Red");
final Rectangle redBorder = new Rectangle(0, 0, Color.TRANSPARENT);
redBorder.setStroke(Color.RED);
redBorder.setManaged(false);
red.boundsInParentProperty().addListener(new ChangeListener<Bounds>() {

@Override
public void changed(ObservableValue<? extends Bounds> observable,
Bounds oldValue, Bounds newValue) {
redBorder.setLayoutX(red.getBoundsInParent().getMinX());
redBorder.setLayoutY(red.getBoundsInParent().getMinY());
redBorder.setWidth(red.getBoundsInParent().getWidth());
redBorder.setHeight(red.getBoundsInParent().getHeight());
}

});
root.getChildren().addAll(new Text("This"), new Text("Is"), new Text("A"), red, new Text("Bordered"), new Text("Text"));
root.getChildren().add(redBorder);


primaryStage.setScene(new Scene(root));
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}
}

关于javafx-2 - 在 JavaFX 文本节点周围绘制边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20598778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com