This stackoverflow answer解释了如何将背景图像放在TextField中。但是,我想知道如何将任意文本作为背景,如果可能的话,不使用CSS就可以。我的第一个想法是拍摄Text节点的快照并将其用作背景图像,如下所示(我在扩展TextField的类的构造函数中执行此操作):
Text text = new Text("TEST");
text.setFill(Color.RED);
WritableImage image = text.snapshot(new SnapshotParameters(), null);
this.setBackground(new Background(
new BackgroundImage(
image,
BackgroundRepeat.NO_REPEAT,
BackgroundRepeat.NO_REPEAT,
new BackgroundPosition(Side.LEFT, 3D, false, Side.TOP, 50, true),
new BackgroundSize(image.getWidth(), image.getHeight(), false, false, false, false))));
但是,它不起作用。背景完全变灰,甚至边框消失。知道怎么做吗? CSS解决方案也是可以接受的。
答案 0 :(得分:0)
我明白了。有时将问题放在这里会有所帮助,它会让你思考。 : - )
有三个问题。首先,我必须使用现有的背景作为新背景的基础。其次,我错误地使用垂直位置,我想如果你把它设置为50%,它会将它垂直居中,但显然不是。最后,你不能在构造函数中执行此操作,因为后台尚不存在,所以我不得不将它包装在Platform.runLater()中。这是修改后的代码。
Platform.runLater(new Runnable() {
@Override
public void run() {
Text text = new Text("TEST");
text.setFill(Color.RED);
WritableImage image = text.snapshot(new SnapshotParameters(), null);
double imageVPos = (getHeight() - image.getHeight()) / 2;
BackgroundImage backImage = new BackgroundImage(
image,
BackgroundRepeat.NO_REPEAT,
BackgroundRepeat.NO_REPEAT,
new BackgroundPosition(Side.LEFT, 7D, false, Side.TOP, imageVPos, false),
new BackgroundSize(image.getWidth(), image.getHeight(), false, false, false, false));
List<BackgroundImage> images = new ArrayList<BackgroundImage>();
images.add(backImage);
setBackground(new Background(getBackground().getFills(), images));
}
});