JavaFX快照未捕获标签

JavaFX快照未捕获标签,javafx,label,javafx-2,javafx-8,snapshot,Javafx,Label,Javafx 2,Javafx 8,Snapshot,我正在制作一个JavaFX程序,旨在让人们制作游戏图(用于体育)。我需要这个程序能够拍摄图表的快照。我在快照中有一个奇怪的行为,它似乎做了我需要它做的一切,除了标签没有出现在快照中 但是当我拍摄快照并尝试将其用作缩略图时,所有的字母标签都丢失了 奇怪的是,标签是stackpane的一部分,stackpane包含圆圈,它们仍然出现。我只是不明白为什么标签没有出现 此外,我确实找到了一份全面的工作。如果我不明白为什么标签没有出现在快照中,我发现如果我只是将标签改为文本对象……突然……快照工作正常

我正在制作一个JavaFX程序,旨在让人们制作游戏图(用于体育)。我需要这个程序能够拍摄图表的快照。我在快照中有一个奇怪的行为,它似乎做了我需要它做的一切,除了标签没有出现在快照中

但是当我拍摄快照并尝试将其用作缩略图时,所有的字母标签都丢失了

奇怪的是,标签是stackpane的一部分,stackpane包含圆圈,它们仍然出现。我只是不明白为什么标签没有出现

此外,我确实找到了一份全面的工作。如果我不明白为什么标签没有出现在快照中,我发现如果我只是将标签改为文本对象……突然……快照工作正常

此时,我将简单地将标签更改为文本对象,但这一直困扰着我,为什么它不能与标签一起工作。有人知道为什么会发生这种行为吗

下面是包含标签的对象的代码。它从stackpane扩展而来。相关的对象是“labelLbl”。同样,简单地将其更改为文本似乎可以解决我的问题

public class EditorPlayer extends StackPane {

private static final Image LEFT_SHADE_IMAGE = new Image(EditorPlayer.class.getClassLoader().getResourceAsStream("resources/leftshade.png"));
private static final Image MIDDLE_SHADE_IMAGE = new Image(EditorPlayer.class.getClassLoader().getResourceAsStream("resources/middleshade.png"));
private static final Image RIGHT_SHADE_IMAGE = new Image(EditorPlayer.class.getClassLoader().getResourceAsStream("resources/rightshade.png"));

//player we are wrapping
private Player player;

//parts of the editor player
private Shape shape;
private Label labelLbl;
private ObservableList<EditorPlayerAction> editorPlayerActions;

private FieldEditor fieldEditor;
private double radius;

private DoubleProperty editorX = new SimpleDoubleProperty(this, "editorX", 0);
private DoubleProperty editorY = new SimpleDoubleProperty(this, "editorY", 0);
private BooleanProperty selected = new SimpleBooleanProperty(this, "selected", false);
private double originalX, originalY, clickX, clickY;//need these values to perform drag

public void setSizes(double radius, double offFontSize, double defFontSize) {

    this.radius = radius;
    //create new components to reflect the resize
    this.getChildren().clear();
    if (this.getPlayer().getPlayerSide() == PlayerSide.OFFENSE) {
        shape = new Circle(radius);
        shape.setStrokeWidth(2);
        shape.setStroke(Color.BLACK);
        shape.setFill(Color.WHITE);
        updateShadeGraphic();
    } else {
        shape = new Rectangle(radius * 2, radius * 2);
        shape.setStrokeWidth(2);
        shape.setStroke(Color.TRANSPARENT);
        shape.setFill(Color.WHITE);
    }

    labelLbl = new Label(player.getLabel());
    if (this.getPlayer().getPlayerSide() == PlayerSide.OFFENSE) {
        labelLbl.setFont(Font.font("Helveitca", FontWeight.BOLD, offFontSize));
    } else {
        labelLbl.setFont(Font.font("Helveitca", FontWeight.BOLD, defFontSize));
    }

    this.getChildren().addAll(shape, labelLbl);


}

public void setOtherBehaviors(){
    selected.addListener((selectedProperty, oldValue, newValue) -> {
        if (newValue) {
            if (this.getPlayer().getPlayerSide() == PlayerSide.OFFENSE) {
                shape.setStrokeWidth(3);
                shape.setStroke(Color.RED);
            }
            labelLbl.setTextFill(Color.RED);

            fieldEditor.getSelectedPlayers().add(this);

        } else {
            if (this.getPlayer().getPlayerSide() == PlayerSide.OFFENSE) {
                shape.setStrokeWidth(2);
                shape.setStroke(Color.BLACK);
            }
            labelLbl.setTextFill(Color.BLACK);

            fieldEditor.getSelectedPlayers().remove(this);
        }
    });
}
public类EditorPlayer扩展StackPane{
私有静态最终图像LEFT_SHADE_Image=新图像(EditorPlayer.class.getClassLoader().getResourceAsStream(“resources/leftshade.png”);
私有静态最终图像MIDDLE\u SHADE\u Image=新图像(EditorPlayer.class.getClassLoader().getResourceAsStream(“resources/middleshade.png”);
私有静态最终图像RIGHT\u SHADE\u Image=新图像(EditorPlayer.class.getClassLoader().getResourceAsStream(“resources/rightshade.png”);
//我们正在包装的球员
私人玩家;
//部分编辑器播放器
私人造型;
自有标签;
私人可观察编辑剧本;
私人字段编辑器字段编辑器;
私人双半径;
private DoubleProperty editorX=新的SimpleDoubleProperty(此“editorX”,0);
private DoubleProperty editorY=新的SimpleDoubleProperty(此“editorY”,0);
private BooleanProperty selected=新的SimpleBoleanProperty(此“已选”,false);
private double originalX,originalY,clickX,clickY;//需要这些值来执行拖动
公共void设置大小(双半径、双offFontSize、双defFontSize){
这个半径=半径;
//创建新组件以反映调整大小的效果
这是.getChildren().clear();
if(this.getPlayer().getPlayerSide()==PlayerSide.offension){
形状=新圆(半径);
形状。设置行程宽度(2);
形状。设定行程(颜色。黑色);
形状。设置填充(颜色。白色);
updateShadeGraphic();
}否则{
形状=新矩形(半径*2,半径*2);
形状。设置行程宽度(2);
形状。设定行程(颜色。透明);
形状。设置填充(颜色。白色);
}
labelLbl=新标签(player.getLabel());
if(this.getPlayer().getPlayerSide()==PlayerSide.offension){
labelLbl.setFont(Font.Font(“helvietca”,fontwweight.BOLD,offFontSize));
}否则{
labelLbl.setFont(Font.Font(“helvietca”,fontwweight.BOLD,defFontSize));
}
this.getChildren().addAll(shape,labelLbl);
}
public void setOtherBehaviors(){
selected.addListener((selectedProperty、oldValue、newValue)->{
如果(新值){
if(this.getPlayer().getPlayerSide()==PlayerSide.offension){
形状。设定行程宽度(3);
形状。调整行程(颜色。红色);
}
标签bl.setTextFill(颜色为红色);
fieldEditor.GetSelectedPlayer().add(此);
}否则{
if(this.getPlayer().getPlayerSide()==PlayerSide.offension){
形状。设置行程宽度(2);
形状。设定行程(颜色。黑色);
}
标签bl.setTextFill(颜色为黑色);
fieldEditor.GetSelectedPlayer().remove(此);
}
});
}