Javafx 为什么可以';我不能用同一个图像两次吗?
我一直在努力学习更多关于使用JavaFX的知识,在这个程序中,我试图展示一个已经玩过的3乘3的tic tac toe游戏。我已经创建了我的ImageView并设置了我想要使用的图像,但是一旦我开始将它们插入到列和行中,我注意到我不能使用同一个图像两次。我有一个空空间的图像,一个X和一个O。一旦我不止一次使用一个图像,我就会得到一个“运行应用程序时出现异常”。可能是新手犯的错误,但如果能解释一下,我们将不胜感激Javafx 为什么可以';我不能用同一个图像两次吗?,javafx,imageview,gridpane,Javafx,Imageview,Gridpane,我一直在努力学习更多关于使用JavaFX的知识,在这个程序中,我试图展示一个已经玩过的3乘3的tic tac toe游戏。我已经创建了我的ImageView并设置了我想要使用的图像,但是一旦我开始将它们插入到列和行中,我注意到我不能使用同一个图像两次。我有一个空空间的图像,一个X和一个O。一旦我不止一次使用一个图像,我就会得到一个“运行应用程序时出现异常”。可能是新手犯的错误,但如果能解释一下,我们将不胜感激 package Fresh; import javafx.application.Ap
package Fresh;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class Fresh extends Application {
@Override
public void start(Stage primaryStage) {
//Create a pane and set its properties
GridPane pane = new GridPane();
pane.setAlignment(Pos.CENTER);
pane.setPadding(new Insets(11.5, 12.5, 13.5, 14.5));
pane.setHgap(5.5);
pane.setVgap(5.5);
//imv0 = X image
final ImageView imv0 = new ImageView();
final Image image0 = new Image(Fresh.class.getResourceAsStream("images/x.gif"));
imv0.setImage(image0);
//imv1 = O image
final ImageView imv1 = new ImageView();
final Image image1 = new Image(Fresh.class.getResourceAsStream("images/o.gif"));
imv1.setImage(image1);
//imv2 = empty image
final ImageView imv2 = new ImageView();
final Image image2 = new Image(Fresh.class.getResourceAsStream("images/empty.gif"));
imv2.setImage(image2);
//Place nodes in the pane
pane.add((imv0),0,0);
pane.add((imv1), 1, 0);
//Once I try to use imv0 again "I get an exception while running".
pane.add((imv0),0,1);
//Create a scene and place it in the stage
Scene scene = new Scene(pane);
primaryStage.setTitle("ShowGridPane");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
您可以使用相同的
图像
任意次数;但是,只能将给定的ImageView
放置在场景图中的一个位置。从:
在场景图中的任何位置,节点最多只能出现一次
要知道为什么这一定是真的,你会期待什么
GridPane.getColumnIndex(imv0)
若要返回,请给定您拥有的代码
因此,您可以:
final Image image0 = new Image(Fresh.class.getResourceAsStream("images/x.gif"));
ImageView imv00 = new ImageView(image0);
ImageView imv01 = new ImageView(image0);
pane.add(imv00, 0, 0);
pane.add(imv01, 0, 1);
// etc
这里的开销还不错;您对每个
图像视图使用相同的图像数据
不应ImageView imv01=新的图像视图(image1)代码>也使用image0
而不是image1
?