答案 0 :(得分:0)
您可能希望查看使用TextArea的background
属性。
new TextArea().setBackground(new Background(new BackgroundImage(myImage,BackgroundRepeat.NO_REPEAT,BackgroundRepeat.NO_REPEAT,BackgroundPosition.CENTER,BackgroundSize.DEFAULT)));
此代码假设您可以将这些行作为图像。
您可以在此处找到有关背景的更多信息:https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/Background.html
如果您希望更改背景图像并根据当前需求动态,您有两种选择。
只需在整个项目中使用Canvas。首先在画布上绘制线条,然后在上面绘制字母。这可能会更好,因为它允许您根据需要自定义项目,但需要更多代码和思考。
使用TextArea,对于BackgroundImage,使用另一个Canvas的快照。您可以使用Canvas绘制您想要的线条,然后使用Snapshot
将其转换为图像。
WritableImage i = canvas.snapshot(new SnapshotParameters(), null);
然后,使用此图像,您可以使用BackgroundImage
将其用作TextArea的背景。
答案 1 :(得分:0)
考虑在Pane
上绘制线条,如下所示:
public class StageTest extends Application{
private static final double WIDTH = 100, HEIGHT = 60;
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("Test Stage");
Label label = new Label("Some text ");
label.setStyle("-fx-background-color:TRANSPARENT");
label.setAlignment(Pos.CENTER);
label.setPrefSize(WIDTH, HEIGHT);
Pane linesPane = getPane(label);
StackPane root = new StackPane(linesPane, label);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
private Pane getPane(Label label) {
Pane pane = new Pane();
pane.setStyle("-fx-background-color:WHITE");
Line blueLine = new Line();
blueLine.setStroke(Color.BLUE);
blueLine.startXProperty().bind(label.layoutXProperty());
blueLine.startYProperty().bind(label.layoutYProperty().add(label.heightProperty().multiply(.333)));
blueLine.endXProperty().bind(label.layoutXProperty().add(label.widthProperty()));
blueLine.endYProperty().bind(label.layoutYProperty().add(label.heightProperty().multiply(.333)));
Line redLine = new Line();
redLine.setStroke(Color.RED);
redLine.startXProperty().bind(label.layoutXProperty());
redLine.startYProperty().bind(label.layoutYProperty().add(label.heightProperty().multiply(.666)));
redLine.endXProperty().bind(label.layoutXProperty().add(label.widthProperty()));
redLine.endYProperty().bind(label.layoutYProperty().add(label.heightProperty().multiply(.666)));
pane.getChildren().addAll(blueLine, redLine);
return pane;
}
public static void main(String[] args) {
launch(args);
}
}