我目前正在玩一个扑克手模拟器,很有趣,但在设置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在应用程序中分配卡片图像。如果有更有效的方法,请随时告诉我。
非常感谢您的帮助。