gpt4 book ai didi

单击 1 次后 JavaFX 刷新按钮消失

转载 作者:行者123 更新时间:2023-12-01 09:21:06 26 4
gpt4 key购买 nike

我有一个程序,它在屏幕上显示 3 个随机的象形文字图像。我添加了一个“刷新”按钮以刷新象形文字图像。当我单击按钮时,图像会正确刷新并随机化。然而,第一次单击该按钮后,它就会消失。我几乎可以肯定它与我的 pane.getChildren().clear(); 行有关,但我似乎无法弄清楚。有什么建议或建议吗?

如果我发布的内容不正确或没有使用正确的指导方针,我深表歉意。这是我的第一篇文章。

这是我的代码:

    import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.control.Button;
import javafx.geometry.Pos;
import javafx.scene.layout.HBox;

public class Lab6a extends Application {

@Override
public void start(Stage myStage) {

//Create an HBox layout.
HBox hBox1 = new HBox();

//Set alignment.
hBox1.setAlignment(Pos.CENTER);
getRandomHieroglyphic(hBox1);

//Create a Refresh button.
Button refresh = new Button("Refresh");
refresh.setOnAction(e -> getRandomHieroglyphic(hBox1));
hBox1.getChildren().add(refresh);

//Set the title for the second window.
myStage.setTitle("Random Hieroglyphics with Refresh");

//Create a scene for the window.
Scene myScene = new Scene(hBox1, 400, 400);

//Place the scene in the second window.
myStage.setScene(myScene);

//Show the stage.
myStage.show();
}

public void getRandomHieroglyphic(HBox pane) {
pane.getChildren().clear();

//Create random generators to get a random image
int randomInt1 = (int) (Math.random() * 9) + 1;
int randomInt2 = (int) (Math.random() * 9) + 1;
int randomInt3 = (int) (Math.random() * 9) + 1;

//Create paths for the images to be called
String path1 = "Image/Hieroglyphics/h" + randomInt1 + ".png";
String path2 = "Image/Hieroglyphics/h" + randomInt2 + ".png";
String path3 = "Image/Hieroglyphics/h" + randomInt3 + ".png";

//Add the images into the pane
pane.getChildren().add(new ImageView (path1));
pane.getChildren().add(new ImageView (path2));
pane.getChildren().add(new ImageView (path3));
}

public static void main(String[] args) {
launch(args);
}
}

最佳答案

clear()HBox 中删除所有子项,包括 Button

您有 3 个 ImageView,并且希望保持 ImageView 的数量不变。这意味着您不应该替换它们,而应该替换它们包含的图像。此外,您应该避免重新加载图像并在开始时加载所有 9 个图像:

public class Lab6a extends Application {

private Image[] images;
private final Random random = new Random();

@Override
public void start(Stage myStage) {
// load all hieroglyphs
images = new Image[9];
for (int i = 0; i < images.length; i++) {
images[i] = new Image("Image/Hieroglyphics/h" + (i+1) + ".png");
}

// store all imageviews in array
final ImageView[] imageViews = Stream.generate(ImageView::new).limit(3).toArray(ImageView[]::new);

// set initial images
getRandomHieroglyphic(imageViews);

...

hBox1.getChildren().add(refresh);
for (ImageView iv : imageViews) {
hBox1.getChildren().add(iv);
}
...
refresh.setOnAction(e -> getRandomHieroglyphic(imageViews));
...
}

public void getRandomHieroglyphic(ImageView[] imageViews) {
for (ImageView iv : imageViews) {
iv.setImage(images[random.nextInt(images.length)]);
}
}

关于单击 1 次后 JavaFX 刷新按钮消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40164098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com