【问题标题】:Why this code does not shows images? Java fx为什么这段代码不显示图像?爪哇外汇
【发布时间】:2017-03-26 22:04:21
【问题描述】:
public class Field extends Pane{

    private Image figure;

    public Field(Image img){
        super();
        setFigure(img);

        ImageView imgView = new ImageView(img);
        imgView.resize(100, 100);

        this.getChildren().add(imgView);
    }

    public Image getFigure() {
        return figure;
    }

    public void setFigure(Image figure) {
        this.figure = figure;
    }

}

和控制器部分:

public class ExampleController implements Initializable{

    @FXML
    private GridPane fields;

    private Imgs imgs = new Imgs();

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {
        initializeBackgroundPools();
        fields.add(new Field (imgs.getBlackRook()), 0, 0);
    }

    private void initializeBackgroundPools(){
    for (int i=0;i<8;i++)
        for (int j=0;j<8;j++){
            Rectangle r =  new Rectangle();
            r.setX(0);
            r.setY(0);
            r.setWidth(100);
            r.setHeight(100);
            if ((i%2==0 && j%2==0) || (i%2==1 && j%2==1)) r.getStyleClass().add("rectangle-white");
            else r.getStyleClass().add("rectangle-black");
            fields.add(r, i, j);    
        }
}

}

它适用于矩形,但这个窗格不适用,我不知道为什么? :) (我也在尝试使用空白背景但没有结果) 图像在另一个图像类 (Imgs) 中加载,加载它们没有错误。 任何人都可以帮助我吗? 谢谢:)

@特拉维斯F

public class Imgs {

    private Image blackRook = new Image("file:../../../grafiki/figures/blackRook.png");
    private Image blackKing = new Image("file:../../../grafiki/figures/blackKing.png");
    private Image blackKnight = new Image("file:../../../grafiki/figures/blackKnight.png");
    private Image blackBishop = new Image("file:../../../grafiki/figures/blackBishop.png");
    private Image blackQueen = new Image("file:../../../grafiki/figures/blackQueen.png");
    private Image blackPawn = new Image("file:../../../grafiki/figures/blackPawn.png");
    private Image whiteRook = new Image("file:../../../grafiki/figures/whiteRook.png");
    private Image whiteKing = new Image("file:../../../grafiki/figures/whiteKing.png");
    private Image whiteKnight = new Image("file:../../../grafiki/figures/whiteKnight.png");
    private Image whiteBishop = new Image("file:../../../grafiki/figures/whiteBishop.png");
    private Image whiteQueen = new Image("file:../../../grafiki/figures/whiteQueen.png");
    private Image whitePawn = new Image("file:../../../grafiki/figures/whitePawn.png");

    public Imgs(){
    }

    public Image getBlackRook() {
        return blackRook;
    }

    public void setBlackRook(Image blackRook) {
        this.blackRook = blackRook;
    }
/**
*other settters/getters
*/
}

【问题讨论】:

  • 你能显示imgs.getBlackRook())的代码吗?

标签: java image javafx model controller


【解决方案1】:

我已经通过制作包源路径来做到这一点,现在它可以工作了:

private Image blackRook = new Image("application/graphics/blackRook.png", 90, 90, false, false);

还是谢谢大家:)

【讨论】:

    【解决方案2】:

    请在你的 Imgs 类中改为这种方式

    private Image blackRook = new Image(getClass().getResourceAsStream("/blackRook.png"));
    

    【讨论】:

    • 如果应用程序被打包为 jar(这是标准的 java 打包格式),这个建议将不起作用,因为 jar 中的文件使用jar: 协议,而不是file: 协议和jar: 协议不理解路径中的 .. 说明符。
    猜你喜欢
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    相关资源
    最近更新 更多