Java FX无法初始化和更改多个ImageView的图像

时间:2018-09-07 00:16:07

标签: java javafx scenebuilder

我目前正在玩一个扑克手模拟器,很有趣,但在设置ImageViews以显示卡图像时遇到一些问题。我是Java FX的新手,还不太了解我在做什么。最初,我在应用程序中仅使用一个名为board1的ImageView进行了测试。但是现在一旦我尝试添加更多它们,它就无法正常工作。现在,我只是想显示整个棋盘或所有5张牌。下面是我的FXML控制器类代码:

public class FXMLDocumentController implements Initializable {

@FXML
private Label label;

@FXML
private ImageView board1;
private ImageView board2;
private ImageView board3;
private ImageView board4;
private ImageView board5;
private ImageView table;

@FXML
private Button button;

@FXML
private void handleButtonAction(ActionEvent event) {
    System.out.println("You clicked me!");
    label.setText("Hello World!");

    Poker poker = new Poker();
    poker.Run();

    //assign photos to the flop
    //Image image = new Image(getClass().getResourceAsStream("/images/cards/" + poker.getBoard(1) + ".png"));
    board1.setImage(new Image(getClass().getResourceAsStream("/images/cards/" + poker.getBoard(0) + ".png")));
    board2.setImage(new Image(getClass().getResourceAsStream("/images/cards/" + poker.getBoard(1) + ".png")));
    board3.setImage(new Image(getClass().getResourceAsStream("/images/cards/" + poker.getBoard(2) + ".png")));
    board4.setImage(new Image(getClass().getResourceAsStream("/images/cards/" + poker.getBoard(3) + ".png")));
    board5.setImage(new Image(getClass().getResourceAsStream("/images/cards/" + poker.getBoard(4) + ".png")));
    System.out.println("You changed the pic ");
}

@Override
public void initialize(URL url, ResourceBundle rb) 
{
   board1.setFitHeight(105); //726
   board1.setFitWidth(200); //500

   board2.setFitHeight(105); //726
   board2.setFitWidth(200); //500

   board3.setFitHeight(105); //726
   board3.setFitWidth(200); //500

   board4.setFitHeight(105); //726
   board4.setFitWidth(200); //500

   board5.setFitHeight(105); //726
   board5.setFitWidth(200); //500
}    

在应用程序中,单击按钮后,我将进行所有模拟。当我尝试运行此命令时,只有board1卡发生了变化,然后在initialize方法中从board2.setFit行收到了空指针异常。

当我删除所有其他卡的代码,但保留board1的setFit行时,则可以正常使用。我独自尝试了任何其他板卡,它们都引发了异常。它似乎只有在我专门更换board1卡的情况下才能运行。

我检查了FXML,并将ID全部设置为相应的卡。我想不出board1和其他卡之间有什么不同之处来使其单独工作。实际上,在场景构建器中,我只是简单地复制粘贴了board1 4次以上,然后分别更改了ID。也许这是问题所在?

所有扑克逻辑都在一个单独的类中,该类计算一手需要的所有东西(每个玩家,棋盘的所有手,以及谁获胜以及获胜手是什么)。我认为理想的做法是只实例化每手一个扑克对象,然后根据该扑克对象的getMethods在应用程序中分配卡片图像。如果有更有效的方法,请随时告诉我。

非常感谢您的帮助。

0 个答案:

没有答案